【问题标题】:How to use Transaction in Entity Framework?如何在实体框架中使用事务?
【发布时间】:2011-02-07 22:34:25
【问题描述】:

如何在实体框架中使用事务?我在 Stackoverflow 上阅读了一些链接:Using Transactions or SaveChanges(false) and AcceptAllChanges()?

但是;我有 3 个表,所以我有 3 个实体:

CREATE TABLE Personel 
(PersonelID integer PRIMARY KEY identity not null, 
Ad varchar(30), 
Soyad varchar(30),
Meslek varchar(100),
DogumTarihi datetime,
DogumYeri nvarchar(100),
PirimToplamı float);

Go

create TABLE Prim
(PrimID integer PRIMARY KEY identity not null,
PersonelID integer Foreign KEY references Personel(PersonelID),
SatisTutari int,
Prim float,
SatisTarihi Datetime);

Go

CREATE TABLE Finans 
(ID integer PRIMARY KEY identity not null, 
Tutar float);

人员、Prim、Finans 我的桌子。如果您查看 Prim 表,您可以看到 Prim 值浮动值,如果我写一个文本框而不是浮动值,我的事务必须运行。

using (TestEntities testCtx = new TestEntities())
{
    using (TransactionScope scope = new TransactionScope())
    {
       // do something...
       testCtx.Personel.SaveChanges();
       // do something...
       testCtx.Prim.SaveChanges();
       // do something...
       testCtx.Finans.SaveChanges();
       scope.Complete();
       success = true;
    }
}

我该怎么做?

【问题讨论】:

  • 他们使用 3 种不同的上下文......您要独立保存每个表吗?
  • 你已经有了代码,还需要什么帮助?
  • 是的,我想添加 3 个表,但我必须进行交易
  • 你已经在你的事务范围内使用事务

标签: c# .net visual-studio-2008 entity-framework visual-studio-2010


【解决方案1】:

当您调用 SaveChanges 时,实体框架将在单个事务中执行这些操作。

当您使用TransactionScope class 时,您是在说“我希望将此块中运行的内容封装在更大的事务中”,这确实是您所做的。

当您在TransactionScope 上调用Complete 时,这就是执行封装在TransactionScope 定义的事务中的所有操作的提交。

【讨论】:

    【解决方案2】:

    SaveChanges 在事务中运行。如果任何脏 ObjectStateEntry 对象无法持久化,SaveChanges 将回滚该事务并引发异常。

    来自documentation

    【讨论】:

      【解决方案3】:

      有一个类似的example in the MSDN site

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多