我正在使用实体框架。这是我的up方法:
public override void Up()
{
AddColumn("Users", "atribute21", c => c.String(unicode: false));
Sql("wrong sql command");
}我强烈地编写了一个糟糕的sql命令,重点是将要执行的sql代码是:
alter table `Users` add column `atribute21` longtext
wrong sql command因此,实体框架将执行第一个sql语句,并在我的数据库中更改属性"atribute21",但在此之后,它将失败,表__migrationhistory不会被修改。
因此,实体框架实际上处于不一致的状态。使用update命令对数据库进行了一些更改,但迁移尚未完成。事实上,我甚至不能回滚更新-数据库TargetMigration:“迁移”,或更新-数据库或任何东西。
解决这一问题的唯一方法是手动删除users表中的"atribute21“,删除错误的sql代码并再次迁移。这个解决方案在本例中非常简单,但它是不可伸缩的,例如,如果我在up方法中有30个sql命令来填充数据库中的数据,而其中一个命令失败了,那么怎么办?
如何使用实体框架从此恢复?
在实体框架中,up方法不应该默认为sql事务吗?
如何配置实体框架以实现up方法将是sql事务?
注意:我发现将sql和sql添加到up方法是一种方法,但我认为这不是一个好的解决方案,我想要一些自动的解决方案。
编辑:
当您使用时,up方法中的自动回滚是存在的,但是我使用的是MySQL/MariaDb,并且不会发生。
发布于 2016-11-23 17:37:24
“如何使用实体框架从此恢复?”
“如何配置实体框架以实现up方法将是一个sql?”?
尝试使用TransactionScope
using System.Transactions;代码:
using (TransactionScope transaction = new TransactionScope())
{
try
{
//Do whatever
transaction.Complete();
}
catch (Exception)
{
throw;
}
}“up方法不应该是实体框架中默认的sql事务吗?”?
很高兴帮你!
https://stackoverflow.com/questions/40769499
复制相似问题