Entity framework 使用不带全局状态的实体框架

Entity framework 使用不带全局状态的实体框架,entity-framework,code-first,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 {

我制作了一个小测试函数,用于创建一个实体框架代码第一个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();
    }
}
使用系统数据;
使用System.Data.Entity;
使用System.Data.Entity.Database;
使用System.Data.SqlServerCe;
公共类SqlCeDb
{
公共静态T实例(),其中T:DbContext,new()
{
DbDatabase.DefaultConnectionFactory=newsqlceconnectionfactory(“System.Data.SqlServerCe.4.0”);
SetInitializer(新的DropCreateDatabaseAlways());
返回新的T();
}
}

依赖注入是很多人正在做的事情。您编写的类依赖于DbContext(即,它是构造函数参数或装饰为依赖项的属性),创建该类时,IoC(控制反转)容器将为您提供该类的实例。我使用过的每个IoC容器都有一种注册单个实例的方法(而不是每次都创建一个新实例)

流行的IoC容器:

  • 结构图
  • 统一
  • 尼尼特

还有其他的,但这些是我看到最常用的。

明白了。请注意,我扩展的DbContext有一个接受DbConnection的构造函数,这或多或少解决了问题。