请有人帮助我尝试在EF6中使用Transaction。这是我在.net中第一次尝试交易。
我已经在他们的网站上阅读了Microsoft的手册。
http://msdn.microsoft.com/en-us/data/dn456843.aspx我会使用一个事务进行用户注册,但没有任何工作。我正在使用EF objectContext
。
这是我的代码的一小部分:
using (var context= new MyModelContainer())
{
using(var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
// code here to create user
context.savechanges();
// code here to add role
context.savechanges();
dbContextTransaction.Commit();
}
catch
{
dbContextTransaction.Rollback();
}
}
}
我的问题是Visual Studio甚至不识别Database.BeginTransaction()
。可能是因为我们正在使用objectContext
?我从不使用交易。我改为使用另一个我们的模型为DbContext
的数据库,它似乎有效。
我们如何将objectContext与事务一起使用(意味着不是分布式系统)? 请问任何教程?
我尝试了交易范围,但它似乎工作但我读到这是分布式系统(((这意味着性能下降。任何建议? 谢谢你的时间!!!
答案 0 :(得分:1)
替换
行using(var dbContextTransaction = context.Database.BeginTransaction())
用这个:
using(var dbContextTransaction = new TransactionScope())
并删除对Rollback的调用。 TransactionScore会做你需要的。
TransactionScope与分布式系统兼容,但如果您不调用其他数据库并按照描述使用它,那么它对您的需求来说已经足够好了。如果您尝试调用保存到另一个db(例如),那么它将需要特殊权限并且将抛出异常。