gpt4 book ai didi

c# - EF DBConfiguration 自动关联到 DBContext,无需注释

转载 作者:行者123 更新时间:2023-11-30 14:55:08 27 4
gpt4 key购买 nike

使用最新的 EF (6.1.1) 和引入 Compact 4.0 的 EF for SQL Server Compact (6.1.1)。目标是 Net 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 中你应该有这样的部分

<contexts>
<context type="<DAL.MyContext, DAL">
<databaseInitializer type="DAL.MyConfiguration, DAL" />
</context>
</contexts>

DAL 将是您的 MyContextMyConfiguration 所在的位置

[编辑]

要仅在代码中执行此操作,您必须使用静态方法 DbConfiguration.SetConfiguration(DbConfiguration configuration)根据 here并且必须在使用上下文之前设置它。

关于c# - EF DBConfiguration 自动关联到 DBContext,无需注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com