解决Entity Framework 4.0中(Ef4)中SaveChanges()前获取自增ID的问题

解决Entity Framework 4.0中(Ef4)中SaveChanges()前获取自增ID的问题

5677发表于2015-11-04

在使用EF,有时候我们会用到在SaveChanges()前获取自增列的ID,用来引用这个值插入关联表中。

因为SaveChanges()是在事务内执行的,为了在其之间获取自增ID,赋值给另一个对象再保存,这里我们就得重新写事务:


    /// <summary>
    /// 用户数据交互
    /// </summary>
    public class User
    {
        /// <summary>
        /// 注册新用户
        /// </summary>
        /// <param name="user"></param>
        /// <param name="login"></param>
        /// <returns></returns>
        public int Add(Entity.User user, Entity.Login login)
        {
            //特殊需求,自定义事务
            using (Entity.HappyOAEntities db2 = new Entity.HappyOAEntities())
            {
                db2.Connection.Open();
                using (var tran = db2.Connection.BeginTransaction())
                {
                    db2.Login.AddObject(login);
                    db2.SaveChanges();
                    user.ID = login.ID;
                    db2.User.AddObject(user);
                    db2.SaveChanges();
                    tran.Commit();
                    if (db2.Connection.State == System.Data.ConnectionState.Open)
                        db2.Connection.Close();
                }
            }
            return login.ID;
        }
    }


可以看到上面首先通过db2.Connection.Open()手动打开数据库链接,接下来通过var tran = db2.Connection.BeginTransaction()开启一个事务,然后成功处理了相关的业务后提交事务tran.Commit()。

参考:

http://blog.csdn.net/wipeouter/article/details/6936425


小编蓝狐