【发布时间】:2014-06-01 09:36:48
【问题描述】:
如果您针对为 SQL Server 复制发布的表运行实体框架迁移(自动或显式),则会收到以下错误:
您只能在 READ COMMITTED 或 REPEATABLE READ 隔离级别
之前有关于此的问题 (here),但他们完全无法解决根本原因:Entity Framework 迁移在 Serializable 隔离级别运行(如在SQL Server 探查器)。
对于结构更改事务来说,这是一个安全的选择,但它与已发布的 sql server 表不兼容。与dbContext.SaveChanges() 事务中使用的默认 READ COMMITED SNAPSHOT 级别不同,我还没有找到一种方法来实际为代码中的迁移设置不同的隔离级别:
TransactionScope(为事务设置隔离级别的经典方法)在Database.Initialize()期间似乎被忽略了最近引入的
Database.BeginTransaction(isolationLevel)实际上是在开始新事务之前尝试初始化数据库,所以不能使用。
已知的解决方法
生成到 SQL 脚本的所有迁移。这可行,但基于代码的迁移是我不想错过的强大工具。
-
使用显式迁移,并以类似的方式启动每个
Up()和Down()方法Sql("设置事务隔离级别读已提交");
这可行,但不方便且容易出错,因为开发人员通常不使用复制数据库。..
【问题讨论】:
标签: c# sql-server entity-framework entity-framework-6 entity-framework-migrations