Использование Entity Framework без глобального состояния - PullRequest
1 голос
/ 18 февраля 2011

Я сделал небольшую тестовую функцию для создания экземпляра Entity Framework Code-First DbContext, напрямую связанного с файлом SQL CE 4.0, но мне действительно не нравится подход глобального состояния. Разве нет лучшего способа сделать это без использования статических свойств DbDatabase?

using System.Data;
using System.Data.Entity;
using System.Data.Entity.Database;
using System.Data.SqlServerCe;

public class SqlCeDb
{
    public static T Instance<T>() where T: DbContext, new()
    {
        DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
        DbDatabase.SetInitializer<T>(new DropCreateDatabaseAlways<T>());
        return new T();
    }
}

1 Ответ

2 голосов
/ 18 февраля 2011

Инъекция зависимости - это то, что делают многие люди. Вы пишете класс, который имеет зависимость от DbContext (т.е. это аргумент конструктора или свойство, оформленное как зависимость), и контейнер IoC (Inversion of Control) предоставит вам его экземпляр при создании класса. Каждый контейнер IoC, с которым я работал, имеет способ регистрации одного экземпляра (вместо создания нового экземпляра каждый раз).

Популярные контейнеры IoC:

  • StructureMap
  • Unity
  • Ninject

Есть и другие, но я вижу, что они используются чаще всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...