EF操作-事务

来源:互联网 发布:乳胶漆品牌 知乎 编辑:程序博客网 时间:2024/05/18 03:59

在软件开发过程中,我们经常会遇到这样的场景,主从表,主表添加一条记录(主键自动增长),从表添加多条记录,同时从表需要用到刚刚添加的主表的自动增长的主键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也可以。