C# EF DBConfiguration自动关联到DBContext,无需注释
使用最新的EF(6.1.1)和EF for SQL Server Compact(6.1.1),该版本支持Compact 4.0。目标是净4.5.1 期待着编码我的EF,然后将其与StructureMap组合在一起。已创建DbConfiguration类:C# EF DBConfiguration自动关联到DBContext,无需注释,c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,使用最新的EF(6.1.1)和EF for SQL Server Compact(6.1.1),该版本支持Compact 4.0。目标是净4.5.1 期待着编码我的EF,然后将其与StructureMap组合在一起。已创建DbConfiguration类: public class MyConfiguration : DbConfiguration { SetDatabaseInitializer<MyContext>(new MyInitializer()); Se
public class MyConfiguration : DbConfiguration
{
SetDatabaseInitializer<MyContext>(new MyInitializer());
SetProviderServices(SqlCeProviderServices.ProviderInvariantName,
SqlCeProviderServices.Instance);
}
使用XUnit,我运行:
using (var ctx = new MyContext(String.Format("Data Source={0}", Path.Combine(databasePath, databaseName)))) {
ctx.Database.Initialize(true)
}
测试用例成功地创建(并通过初始值设定项进行种子设定)my Compact数据库。但是在幕后发生了很多我不明白的事情
例如,我不需要在MyContext类上有以下注释:
[DbConfigurationType(typeof(MyConfiguration))]
EF必须足够聪明,可以看到我有一个扩展DbConnection并使用它的MyConfiguration类。或我还可以一起删除MyConfiguration,测试用例仍然会生成一个数据库(显然没有种子)。怎么做
我希望能够使用代码将DbConfiguration分配给特定的DbContext,而无需经历静态:
static MyContext()
{
DbConfiguration.set(new MyConfiguration());
}
原因是,还需要使用StructureMap为不同的“配置文件”。有什么想法吗 在web.config中选择“是”和“否”应该有这样一个部分
<contexts>
<context type="<DAL.MyContext, DAL">
<databaseInitializer type="DAL.MyConfiguration, DAL" />
</context>
</contexts>
其中DAL
就是您的MyContext
和MyConfiguration
存在的地方
[编辑]
要仅在代码中执行此操作,必须使用静态方法DbConfiguration.SetConfiguration(DbConfiguration配置)
根据,必须在使用上下文之前设置它。使用代码构建结构,希望避免配置文件(如web.config),以便StructureMap可以完成我的合成。接受答案。我看到了那个静态呼叫。但是如果我们有多个DBContext需要不同的DBConfiguration对象,会发生什么情况呢?“做不到吗?”MatthewYoung说,这种方法是单一的,我想你不能有更多的,但这比我以前做的更多,我不知道。但是在web.config中你可以有多个,所以这一定是可能的,我只是不知道怎么做。
<contexts>
<context type="<DAL.MyContext, DAL">
<databaseInitializer type="DAL.MyConfiguration, DAL" />
</context>
</contexts>