小编err*_*ror的帖子

实体框架,代码优先。如何覆盖生成向上/向下脚本

我在我的解决方案中使用有界上下文 (BC) 和 EF Code-first 来生成数据库。

有些表被部分地(不是所有字段)定义为不同 BC 中的类,以便为相关表添加外键,但总是有一个 BC 具有一个类,该类通过单个类定义具有所有字段的表。

我没有找到基于多个上下文生成单个迁移的方法,因此我不得不添加多个迁移。但是在每次迁移中,EF 都会添加 BC 中所有类的所有更改,包括部分定义的表。最大的问题是:

  • 当我添加部分表时,EF 想向数据库添加一个新表,该表已存在
  • 当我只需要删除表仅部分映射到的一个类中的字段时,它想从数据库中的表中删除一个字段,这会破坏其他类。

我正在工作的项目有十几个奇怪的开发人员、350 多个表和 20 多个 BC,因此手动更改 EF Migration 生成的脚本听起来很疯狂。

似乎解决它的唯一方法是更改​​迁移管道以排除由标记有特定属性的类定义的表的创建或更改。

那么,有没有其他方法可以解决我的问题,或者我应该破解 EF 源代码并在那里注入旁路例程?

entity-framework entity-framework-migrations

6
推荐指数
1
解决办法
148
查看次数

如何在Entity Framework Core中实现环境事务?

我需要在两个模型下实现事务(使用两个分离的有界上下文).所以这样的代码:

  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服务也是个坏主意.

c# entity-framework transactions

5
推荐指数
1
解决办法
5123
查看次数