[英]How to apply transaction in Entity framework
I have two tables.我有两张桌子。 I am updating those tables using entity framework.
我正在使用实体框架更新这些表。 here is my code
这是我的代码
public bool UpdateTables()
{
UpdateTable1();
UpdateTable2();
}
If any table update operation fails other should not be committed how do i achieve this in entity framework?如果任何表更新操作失败,其他不应该提交我如何在实体框架中实现这一点?
using (TransactionScope transaction = new TransactionScope())
{
bool success = false;
try
{
//your code here
UpdateTable1();
UpdateTable2();
transaction.Complete();
success = true;
}
catch (Exception ex)
{
// Handle errors and deadlocks here and retry if needed.
// Allow an UpdateException to pass through and
// retry, otherwise stop the execution.
if (ex.GetType() != typeof(UpdateException))
{
Console.WriteLine("An error occured. "
+ "The operation cannot be retried."
+ ex.Message);
break;
}
}
if (success)
context.AcceptAllChanges();
else
Console.WriteLine("The operation could not be completed");
// Dispose the object context.
context.Dispose();
}
use transactionscope使用事务范围
public bool UpdateTables()
{
using (System.Transactions.TransactionScope sp = new System.Transactions.TransactionScope())
{
UpdateTable1();
UpdateTable2();
sp.Complete();
}
}
also you need add System.Transactions to your project refference您还需要将 System.Transactions 添加到您的项目参考中
You don't need to use a TransactionScope: Entity Framework automatically enforces a transaction when you call SaveChanges() on your context.您不需要使用 TransactionScope:当您在上下文中调用 SaveChanges() 时,实体框架会自动执行事务。
public bool UpdateTables()
{
using(var context = new MyDBContext())
{
// use context to UpdateTable1();
// use context to UpdateTable2();
context.SaveChanges();
}
}
You can do something like this....你可以做这样的事情......
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.RepeatableRead }))
{
using (YeagerTechEntities DbContext = new YeagerTechEntities())
{
Category category = new Category();
category.CategoryID = cat.CategoryID;
category.Description = cat.Description;
// more entities here with updates/inserts
// the DbContext.SaveChanges method will save all the entities in their corresponding EntityState
DbContext.Entry(category).State = EntityState.Modified;
DbContext.SaveChanges();
ts.Complete();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.