我在我的解决方案中使用有界上下文 (BC) 和 EF Code-first 来生成数据库。
有些表被部分地(不是所有字段)定义为不同 BC 中的类,以便为相关表添加外键,但总是有一个 BC 具有一个类,该类通过单个类定义具有所有字段的表。
我没有找到基于多个上下文生成单个迁移的方法,因此我不得不添加多个迁移。但是在每次迁移中,EF 都会添加 BC 中所有类的所有更改,包括部分定义的表。最大的问题是:
我正在工作的项目有十几个奇怪的开发人员、350 多个表和 20 多个 BC,因此手动更改 EF Migration 生成的脚本听起来很疯狂。
似乎解决它的唯一方法是更改迁移管道以排除由标记有特定属性的类定义的表的创建或更改。
那么,有没有其他方法可以解决我的问题,或者我应该破解 EF 源代码并在那里注入旁路例程?
我需要在两个模型下实现事务(使用两个分离的有界上下文).所以这样的代码:
using (TransactionScope scope = new TransactionScope())
{
//Operation 1
using(var context1 = new Context1())
{
context1.Add(someCollection1);
context1.SaveChanges();
}
//Operation 2
using(var context2 = new Context2())
{
context2.Add(someCollection2);
context2.SaveChanges();
}
scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
返回异常:
已检测到环境事务.实体框架核心不支持环境事务.请参阅 http://go.microsoft.com/fwlink/?LinkId=800142
在Link中,他们建议在两个上下文中使用一个连接.并使用context2来使用context1的块.
但如果我为每个型号使用自己的控制器/服务:
using (TransactionScope scope = new TransactionScope())
{
service1.DoWork();
service2.DoWork();
scope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
我该如何实现呢?在方法中添加连接作为参数 - 似乎很荒谬.与连接的Init服务也是个坏主意.