首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dbcontext中的.NET MVC 3回滚

Dbcontext中的.NET MVC 3回滚
EN

Stack Overflow用户
提问于 2011-12-28 20:00:15
回答 2查看 5.5K关注 0票数 4

在MVC3中,可以在调用DbContext.SaveChanges()之后回滚数据库吗?

My entities类:

代码语言:javascript
复制
public class BipEntities : DbContext
{
    public DbSet<Page> Pages { get; set; }
    public DbSet<ImageFile> ImageFiles { get; set; }
}

我要做的是将一个ImageFile记录插入到数据库中,然后使用自动递增的id作为图像文件名,将图像文件保存到其他位置。当System.IO失败时,我想回滚数据库。

代码语言:javascript
复制
BipEntities db = new BipEntities();
db.Database.Connection.Open();
DbTransaction tranx = db.Database.Connection.BeginTransaction();

ImageFile img = new ImageFile { CreatedAt = DateTime.Now };
db.ImageFiles.Add(img);
db.SaveChanges();

string filename = "img" + img.Id.ToString() + ".png";
try {
    //Works on system IO to process file
    tranx.Commit();

} Catch ( Exception) {
    tranx.Rollback();
}

db.Database.Connection.Close();

但是,上面的代码给出了这个错误消息:

代码语言:javascript
复制
EntityConnection can only be constructed with a closed DbConnection.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-28 20:10:58

您应该将DbContext包装在数据库事务中,可以使用TransactionScope,也可以使用在事务中运行的DbConnection创建DbContext

代码语言:javascript
复制
using (var con = new SqlConnection(conStr))
{
    con.Open();
    using (var tran = con.BeginTransaction())
    {
        var img = new Image();

        using (var db = new BipEntities(con))
        {
            db.Images.AddObject(img);

            db.SaveChanges();
        }

        // Write to disk here.
        WriteStuffToDisk(stuff, img.Id);

        tran.Commit();
    }        
}
票数 2
EN

Stack Overflow用户

发布于 2011-12-28 20:16:18

基本上,.saveChanges() 就是你的提交。如果你想回滚,只要不做.saveChanges,只关闭你的数据库访问层,不会保存任何更改。

代码语言:javascript
复制
using(var db = new dbconnection())
{
    myEntity item = new myEntity { Name = "Hello" };

    db.tblofmyEntities.AddObject(item);

    if (item.Name != "FOO")
         db.SaveChanges();

}

该项目将被保存,因为其名称不是"FOO“。如果是FOO,则不会保存。因此,当应用程序到达}时,不会保存任何项。您可以在if块之前或内部调用.AddObject()函数,这并没有太大的区别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8655643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档