Многопоточность в opennetcf.orm (как использовать SqlCeDataStore)

1

Я только начал использовать структуру OpenNETCF.ORM, и у меня возникла проблема. Каков правильный способ использования SqlCeDataStore в многопоточном приложении?

В однопоточном приложении я бы просто использовал статическое поле:

public class MyApp
{
    private static SqlCeDataStore _store;
    public static SqlCeDataStore Store
    {
        get {
            if (_store == null) {
                _store = new SqlCeDataStore("database.sdf");
                // other initialization stuff, DiscoverTypes() etc...
            }
            return _store;
        }
    }
}

И тогда я буду использовать его так:

var customers = MyApp.Store.Select<Customer>().ToArray();

После некоторых исследований на SQL Server Compact я обнаружил, что соединения не являются потокобезопасными, поэтому каждый поток должен иметь собственное соединение. OpenNETCF.ORM имеет возможность использовать новое соединение при каждом подключении к базе данных. Должен ли я просто использовать это?

Другой вариант - создать новый SqlCeDataStore для каждого потока. Это лучше?

Каков правильный путь?

Теги:
multithreading
orm
compact-framework
opennetcf

1 ответ

1

Мы используем SQL Compact в разнообразных многопоточных приложениях с использованием OpenNETCF ORM без каких-либо проблем. Мы запускаем их на полной Windows и Windows CE.

Мы используем поведение подключения "Поддержание обслуживания", когда для всех вызовов CRUD создается новое соединение, но для выполнения работ по техническому обслуживанию (создание таблиц и т.д.) Поддерживается одно фоновое. Это обеспечивает хорошую производительность и разумную степень безопасности резьбы.

  • 0
    ctacke, так мой пример кода в порядке? Просто используйте статическое поле для SqlCeDataStore, инициализируйте его при запуске и позвольте фоновым потокам использовать его?
  • 0
    Все должно быть в порядке. Лично я никогда не использую статику (или Singletons в этом отношении), но если это то, как вы заставляете иметь только один, у вас все будет хорошо.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню