EF DBConfiguration自动关联到不带注释的DBContext
本文关键字:注释 DBContext DBConfiguration 关联 EF | 更新日期: 2023-09-27 18:23:48
使用最新的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());
SetProviderServices(SqlCeProviderServices.ProviderInvariantName,
SqlCeProviderServices.Instance);
}
以及一个上下文:
public class MyContext : DbContext
{
public MyContext(String connection) : base(connection) {}
....
}
使用XUnit我运行:
using (var ctx = new MyContext(String.Format("Data Source={0}", Path.Combine(databasePath, databaseName)))) {
ctx.Database.Initialize(true)
}
测试用例成功地创建了我的Compact数据库(并通过初始化器种子化)。但在幕后发生了很多我不明白的事情。
例如,我不需要在MyContext类上有以下注释:
[DbConfigurationType(typeof(MyConfiguration))]
EF必须足够聪明,才能看到我有一个扩展DbConnection的MyConfiguration类并使用它。或者?我也可以一起删除MyConfiguration,测试用例仍然会生成一个数据库(显然不是种子)。怎样
我希望能够用代码将DbConfiguration分配给特定的DbContext,而不需要经过静态:
static MyContext()
{
DbConfiguration.set(new MyConfiguration());
}
原因是也为不同的"配置文件"与StructureMap。有什么想法吗?
在web.config中的"是"answers"否"应该有一个类似的部分
<contexts>
<context type="<DAL.MyContext, DAL">
<databaseInitializer type="DAL.MyConfiguration, DAL" />
</context>
</contexts>
其中DAL
将是您的MyContext
和MyConfiguration
存在的
[EDIT]
要仅在代码中执行此操作,必须使用静态方法DbConfiguration.SetConfiguration(DbConfiguration configuration)
根据此处,并且必须在使用上下文之前进行设置。