EntityFramework Transaction

事物的概念由来已久,简而言之就是"全做或不做"。在EntityFramework中,事物也有很好的支持。通过指定事物的影响的范围,在合适的时间开启和提交事物,我们就能够很好地使用事物完成CRUD操作,确保数据一致性。

1.Customer类

namespace EntityFrameworkTransaction
{
    class Customer
    {
        public int Id { set; get; }

        public string Username { set; get; }

        public string Password { set; get; }
    }
}
2.ApplicationDbContext

namespace EntityFrameworkTransaction
{
    class ApplicationDbContext:DbContext
    {
        public ApplicationDbContext()
            :base("name=ModelsContainer")
        {

        }

        public DbSet<Customer> Customers { set; get; }
    }
}
3.App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <connectionStrings>
      <add name="ModelsContainer"
         connectionString="Server=localhost;Database=MyWSCLM;User ID=sa; Password=1234;"
         providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>
4.Test

namespace EntityFrameworkTransaction
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var ctx = new ApplicationDbContext())
            {
                using (var ctxTransaction = ctx.Database.BeginTransaction())
                {
                    try
                    {
                        ctx.Database.Log = Console.WriteLine;

                        ctx.Customers.Add(new Customer()
                        {
                            Username = "justin",
                            Password = "123456"
                        });

                        ctx.Database.ExecuteSqlCommand("update Customerss set password ='xpy092929'");
                        
                        var list = ctx.Customers.Where(x => x.Id > 0).ToList();
                        list.ForEach(x =>
                        {
                            x.Username = "user002";
                        });
                        
                        ctx.SaveChanges();
                        ctxTransaction.Commit();
                    }
                    catch (Exception)
                    {
                        ctxTransaction.Rollback();
                    }
                }
            }

            Console.ReadKey();
        }
    }
}
5.结果

1)正常提交



2)异常回滚


6.推荐阅读

1)EF事务,异步及性能优化

http://www.cnblogs.com/CreateMyself/p/4787856.html#commentform

2)EF中事务处理

http://blog.sina.com.cn/s/blog_537c4fd3010123jb.html

3)EF批量提交和事务

http://www.cnblogs.com/hyl8218/archive/2011/10/10/2205576.html



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值