假如我是在同一时间将在下面的表中的记录现在
表1
表2
表3
表4
表5如何在LINQ的maintan交易的entites
我想要做的是,在情况的任何异常或错误的插入在表3中发生,然后记录它之前被插入(例如,在表1和表2)必须是回滚...
如何一世像这样管理交易?
假如我是在同一时间将在下面的表中的记录现在
表1
表2
表3
表4
表5如何在LINQ的maintan交易的entites
我想要做的是,在情况的任何异常或错误的插入在表3中发生,然后记录它之前被插入(例如,在表1和表2)必须是回滚...
如何一世像这样管理交易?
默认情况下,调用SaveChanges将在交易(见文档的Remarks part)
如果你想在交易更多的控制执行,你可以用你的SaveChanges在一个TransactionScope块。然后SaveChanges会收到您的环境交易并使用该交易。
当你想要一个分布式事务(例如使用多个上下文或如果您使用WCF)这可能是有用的。
至于你提到你使用不同的模型,你就一个TransactionScope的范围内同时使用ObjectContexts(和使用some logic与AcceptAllChanges)
那么你的代码是这样:
using (TransactionScope scope = new TransactionScope())
{
//Do something with context1
//Do something with context2
//Save Changes but don't discard yet
context1.SaveChanges(false);
//Save Changes but don't discard yet
context2.SaveChanges(false);
//if we get here things are looking good.
scope.Complete();
//If we get here it is save to accept all changes.
context1.AcceptAllChanges();
context2.AcceptAllChanges();
}
这是实体框架4
默认行为,该交易隐含..只要你拨打的SaveChanges任何错误都将触发回滚。
能否手动处理它?实际上Table1的PrimaryKey是Table2的ForeignKey,Table2的PK是Table3的FK,等等......那么它将如何工作? – 2011-12-28 09:29:25
@DotNetIsMyPower你需要关联它们。如同这些字段已经可用那样指定这种关联。 Table2.Prop = Table1.Prop;等 – scartag 2011-12-28 09:33:51
但他们在不同的模型。尽管让我试试。快速回复 – 2011-12-28 09:37:19
烨@scartag感谢好友得到了我的答案,谢谢:) – 2011-12-28 09:49:19