Entity framework 使用不带全局状态的实体框架
我制作了一个小测试函数,用于创建一个实体框架代码第一个DbContext实例,直接连接到一个SQL CE 4.0文件,但我确实不喜欢全局状态方法。在不使用DbDatabase静态属性的情况下,是否有更好的方法来实现这一点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 {
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的构造函数,这或多或少解决了问题。