gpt4 book ai didi

c# - Entity Framework 事务

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:14 24 4
gpt4 key购买 nike

在 Entity Framework 6 中使用(重用)事务的最佳方式是什么。用例:如果我们有两种方法

public decimal Withdraw(string accNum, decimal amount) 
{
using (var db = new MyDbContext())
{
var query = from t in db.MoneyTransactions
where t.AccountNumber.Equals(accNum)
select t;
MoneyTransaction mt = query.First();
mt.Amount -= amount;
db.SaveChanges();
}
return amount;
}

public void Put(string accNum, decimal amount)
{
using (var db = new MyDbContext())
{
var query = from t in db.MoneyTransactions
where t.AccountNumber.Equals(accNum)
select t;
MoneyTransaction mt = query.First();
mt.Amount += amount;
db.SaveChanges();
}
}

我想单独使用这些方法(例如,只是把钱存入一个帐户),并在单笔交易中使用它们:

public void Transfer(string srcAcc, string destAcc, decimal amount) 
{
Withdraw(srcAcc,amount);
Put(destAcc,amount);
}

最佳答案

查看 Systems.Transactions 程序集和命名空间。 (BCL的一部分)

然后你可以这样做:

using(var trans = new TransactionScope())
{
Withdraw(srcAcc, amount); // No changes needed to these
Put(destAcc, amount); // two methods...

trans.Complete();
}

System.Transactions 将创建所谓的环境事务。这是存储在线程上的事务,任何 ADO.NET、LINQ-to-SQL 和 Entity Framework 数据库操作都将使用查找此 TransactionScope 对象。

此事务在 using block 的末尾提交或回滚。在 TransactionScope 对象上调用 Complete() 将触发数据库中的提交,而不调用 Complete() 将回滚事务。

关于c# - Entity Framework 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24853861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com