Лучшие практики для управления Linq к SQL файлы Dbml?

Привет, вы можете сделать что-то вроде этого:

  1. Создать класс, который реализует AsyncTask
    // TASK 
    public class SomeClass extends AsyncTask<Void, Void, String>>
    {
    
        private OnTaskExecutionFinished _task_finished_event;
    
        public interface OnTaskExecutionFinished
        {
            public void OnTaskFihishedEvent(String Reslut);
        }
    
        public void setOnTaskFinishedEvent(OnTaskExecutionFinished _event)
        {
            if(_event != null)
            {
                this._task_finished_event = _event;
            }
        }
    
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
    
        }
    
        @Override
        protected String doInBackground(Void... params)
        {
            // do your background task here ...
    
            return "Done!";
        }
    
        @Override
        protected void onPostExecute(String result)
        {
            super.onPostExecute(result);
            if(this._task_finished_event != null)
            {
                this._task_finished_event.OnTaskFihishedEvent(result);
            }
            else
            {
                Log.d("SomeClass", "task_finished even is null");
            }
        }
    }
    
  2. Добавить в главную активность
    // MAIN ACTIVITY
    public class MyActivity extends ListActivity
    {
       ...
        SomeClass _some_class = new SomeClass();
        _someclass.setOnTaskFinishedEvent(new _some_class.OnTaskExecutionFinished()
        {
        @Override
        public void OnTaskFihishedEvent(String result)
        {
            Toast.makeText(getApplicationContext(),
                    "Phony thread finished: " + result,
                    Toast.LENGTH_SHORT).show();
        }
    
       });
       _some_class.execute();
       ...
     }
    
33
задан Gert Arnold 24 August 2013 в 16:06
поделиться

4 ответа

Вы посмотрели SqlMetal? Это официально поддерживается, хотя не продвинутый слишком много. Можно использовать его для создания dbmls из командной строки - мы использовали его в качестве части непрерывных обновлений интеграции дб (удостоверьтесь, что у Вас есть действительно хорошее разделение кода, если Вы делаете это, хотя - частичные классы являются спасителем - поскольку dbml будет перезаписан).

, Если я вспоминаю правильно, это не имеет вполне тех же функций как образцовый разработчик в Visual Studio (я думаю, что это обрабатывает плюрализацию по-другому). Там хорошее сообщение об этом на блоге .

Ben Hall
19
ответ дан 27 November 2019 в 18:33
поделиться

То, что разработчик L2S не поддерживает синхронизацию со структурой базы данных, является огромным ограничением в моем уме. Однако существует дополнение, доступное, который обеспечивает некоторые пересинхронизирующие возможности:

http://www.huagati.com/dbmltools/

, К сожалению, это больше не свободно.

9
ответ дан 27 November 2019 в 18:33
поделиться

PLINQO - это набор шаблонов генерации кода, генерирующих LINQ to SQL. Он поддерживает синхронизацию с базой данных и разделение сущностей на несколько классов вместе со многими другими функциями, которые упрощают использование LINQ to SQL.

Посетите сайт PLINQO по адресу http://www.plinqo.com а также вступительные видеоролики.

6
ответ дан 27 November 2019 в 18:33
поделиться

Это зависит от языка.

В текстах C ++ часто предлагается второй формат, поскольку он будет работать с итераторами, которые можно сравнивать (! =) Напрямую, но не с или меньше, чем условие. Также предварительное приращение может быть быстрее, чем последующее приращение, поскольку нет необходимости в копии переменной для сравнения - однако оптимизаторы могут с этим справиться.

Для целых чисел работает любая форма. Обычная идиома для C - первая, а для C ++ - вторая.

Для C # и Java я бы использовал foreach, чтобы перебирать все вещи.

В C ++ также есть функция std :: for_each, требующая использование функтора, который для простых случаев, вероятно, более сложен, чем любой из приведенных здесь примеров, и Boost FOR_EACH, который может выглядеть как foreach C #, но сложен внутри.

Тексты C ++ часто предлагают второй формат, так как он будет работать с итераторами, которые можно сравнивать (! =) Напрямую, но не с условием больше или меньше. Также предварительное приращение может быть быстрее, чем последующее приращение, поскольку нет необходимости в копии переменной для сравнения - однако оптимизаторы могут с этим справиться.

Для целых чисел работает любая форма. Обычная идиома для C - первая, а для C ++ - вторая.

Для C # и Java я бы использовал foreach, чтобы перебирать все вещи.

В C ++ также есть функция std :: for_each, требующая использование функтора, который для простых случаев, вероятно, более сложен, чем любой из приведенных здесь примеров, и Boost FOR_EACH, который может выглядеть как foreach C #, но сложен внутри.

Тексты C ++ часто предлагают второй формат, так как он будет работать с итераторами, которые можно сравнивать (! =) Напрямую, но не с условием больше или меньше. Также предварительное приращение может быть быстрее, чем последующее приращение, поскольку нет необходимости в копии переменной для сравнения - однако оптимизаторы могут с этим справиться.

Для целых чисел работает любая форма. Обычная идиома для C - первая, а для C ++ - вторая.

Для C # и Java я бы использовал foreach, чтобы перебирать все вещи.

В C ++ также есть функция std :: for_each, требующая использование функтора, который для простых случаев, вероятно, более сложен, чем любой из приведенных здесь примеров, и Boost FOR_EACH, который может выглядеть как foreach C #, но сложен внутри.

=) напрямую, но не с условием больше или меньше. Также предварительное приращение может быть быстрее, чем последующее приращение, поскольку нет необходимости в копии переменной для сравнения - однако оптимизаторы могут с этим справиться.

Для целых чисел работает любая форма. Обычная идиома для C - первая, а для C ++ - вторая.

Для C # и Java я бы использовал foreach, чтобы перебирать все вещи.

В C ++ также есть функция std :: for_each, требующая использование функтора, который для простых случаев, вероятно, более сложен, чем любой из приведенных здесь примеров, и Boost FOR_EACH, который может выглядеть как foreach C #, но сложен внутри.

=) напрямую, но не с условием больше или меньше. Также предварительное приращение может быть быстрее, чем последующее приращение, поскольку нет необходимости в копии переменной для сравнения - однако оптимизаторы могут с этим справиться.

Для целых чисел работает любая форма. Обычная идиома для C - первая, а для C ++ - вторая.

Для C # и Java я бы использовал foreach, чтобы перебирать все вещи.

В C ++ также есть функция std :: for_each, требующая использование функтора, который для простых случаев, вероятно, более сложен, чем любой из приведенных здесь примеров, и Boost FOR_EACH, который может выглядеть как foreach C #, но сложен внутри.

существуют определенные параметры схемы, которые они не улавливают, например значения столбцов по умолчанию, что заставляет вас вручную изменять параметр. Это может привести к потере часов каждый раз, когда вы обновляете DBML, не осознавая или не запоминая, где вам нужно внести ручные настройки, и ваш код начинает давать сбой.

Чтобы избежать этого, можно написать модульный тест, который использует отражение для проверьте метаданные LINQ на предмет этих (ручных) настроек. Если тест не проходит, выдается описательное сообщение об ошибке, инструктирующее пользователя внести правильные изменения в свойства столбца. Это не идеальное решение, и оно может быть неудобным, если у вас много ручных настроек, но оно может помочь избежать серьезных проблем для вас и вашей команды.

Вот пример nunit-теста для проверки того, что столбец установлен для автоматического создания из БД.

    [Test]
    public void TestMetaData()
    {
        MyObj my_obj = new MyObj()
        {
            Foo = "bar",
        };

        Type type = MyObj.GetType();
        PropertyInfo prop = type.GetProperty("UpdatedOn");
        IEnumerable<ColumnAttribute> info = (IEnumerable<ColumnAttribute>)prop.GetCustomAttributes(typeof(ColumnAttribute), true);
        Assert.IsTrue(
            info.Any<ColumnAttribute>(x => x.IsDbGenerated == true), 
            "The DBML file needs to have MyObj.UpdatedOn AutoGenerated == true set. This must be done manually if the DBML for this table gets refreshed from the database."
        );
    }
7
ответ дан 27 November 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: