EF操作-事务

在软件开发过程中,我们经常会遇到这样的场景,主从表,主表添加一条记录(主键自动增长),从表添加多条记录,同时从表需要用到刚刚添加的主表的自动增长的主键id,接下来我们就演示一下在EF中怎么实现事务,我们假设TUsers表与TUsersExtInfo表,代码如下:

 class Program
    {
        static void Main(string[] args)
        {
            CodeFirstContext context = new CodeFirstContext();
            //IDbTransaction trans = null;
            DbTransaction trans=null;
            try
            {
                //打开连接
                context.Database.Connection.Open();
                //开始事务
                trans = context.Database.Connection.BeginTransaction();
                //context.Database.UseTransaction(trans);//这句不加的话,引发异常,"SqlConnection不支持并行事务"

                TUsers user = new TUsers();
                user.Account = "admin123";
                user.Password = "123456789";
                user.CreateDate = DateTime.Now;
                context.Users.Attach(user);
                context.Entry(user).State = EntityState.Added;

                var affectcount = context.SaveChanges();

                TUsersExtInfo userExt = new TUsersExtInfo();
                userExt.UserId =user.UserId;//获取刚刚添加的自动增长id
                context.UsersExtInfo.Attach(userExt);
                context.Entry(userExt).State = EntityState.Added;

                 affectcount = context.SaveChanges();
                 //throw new Exception("发生异常");
                 trans.Commit();

                Console.WriteLine(string.Format("新添加记录id:{0}", user.UserId));

                var userlist = context.Users.ToList();
                foreach (var u in userlist)
                {
                    Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password));
                }
            }
            catch (Exception ex)
            {
                trans.Rollback();
                Console.WriteLine("错误信息:" + ex.Message);
            }
            finally
            {
                context.Database.Connection.Close();
            }
        }
    }

或者直接使用SQL也可以。

猜你喜欢

转载自blog.csdn.net/u011872945/article/details/72967781
EF