EF架构~关系表插入应该写在事务里,但不应该是分布式事务_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > EF架构~关系表插入应该写在事务里,但不应该是分布式事务

EF架构~关系表插入应该写在事务里,但不应该是分布式事务

 2013/10/28 15:57:57  张占岭  博客园  我要评论(0)
  • 摘要:回到目录这个标题很有意思,关系表插入,就是说主表和外表键在插入时,可能会有同步插的情况,如在建立主表时,扩展表需要同步完成数据的初始化工作,而对于多表插入时,我们为了保证数据的一致性会针它写在事务中,而对于.net中的事件,它在一些情况下,会不那么单纯,对于ef和linqtosql来说,你的事务如果出现多次提交动作(submitchange|savechanges),那么,.net这边会把它提升为分布式事务(MSDTC),即.net认为,对于一个数据表的操作,不会出现多个savechanges
  • 标签:关系 架构

回到目录

这个标题很有意思,关系表插入,就是说主表和外表键在插入时,可能会有同步插的情况,如在建立主表时,扩展表需要同步完成数据的初始化工作,而对于多表插入时,我们为了保证数据的一致性会针它写在事务中,而对于.net中的事件,它在一些情况下,会不那么单纯,对于ef和linq to sql来说,你的事务如果出现多次提交动作(submitchange | savechanges),那么,.net这边会把它提升为分布式事务(MSDTC),即.net认为,对于一个数据表的操作,不会出现多个savechanges,OK,这个可以解释的通,一个数据库,一个提交,这是符合性能要求的,呵呵,但对于我们的架构来说,有时一疏忽,就违背了.net的这个原则,如,我们封装的Insert方法,可能是这样的

   public virtual void Insert(TEntity item)
        {
       
            Db.Entry<TEntity>(item);
            Db.Set<TEntity>().Add(item);
            this.SaveChanges();
           
        }

这个代码也没有问题,在一个插入动作完成后,系统由SaveChanges方法完成一次提交,正是由于这样的代码,所以我们的麻烦就来了,如果是对两个表的操作吗?

aRepository.Insert(a);
bRepository.Insert(b);

什么问题?数据一致性不能保证,因为没有事务块,呵呵,加上了再看看

  using (TransactionScope trans = new TransactionScope())
{
  aRepository.Insert(a);
  bRepository.Insert(b);
  trans.Commit();
}

OK,感觉是没有问题了,但细一想就会看出问题来了,因为我们封装的insert会有提交动作,所以,在这个事务块中,.net会被认识是一个MSDTC(分布式的事务),原因是提交了多次,而如果你没有打开msdtc服务的话,就会出现下面的黄屏了

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" alt="" />

注意:系统触发分布式事务的前提是你的WEB服务器与数据库服务器分别部署在两个服务器上,一台不会出现这个问题的。

OK,这个MSDTC是怎么一回事,不是今天要说的重要,如果想学习MSDTC,请看我的这些文章:

 

二十六回   将不确定变为确定~transactionscope何时提升为分布式事务?

class="postTitle2">第二十七回   将不确定变为确定~transactionscope何时提升为分布式事务~续

第二十八回   将不确定变为确定~transactionscope何时提升为分布式事务~再续(避免引起不必要的MSDTC)

第二十九回   将不确定变为确定~transactionscope何时提升为分布式事务~大结局

今天我们要说的是在插入关系表时,怎样使它不被提升为分布式事务,事实上,怎么做我们已经知道了,就是方法中只出现一个savechages,呵呵,而对于主表与扩展表来说,对于自增主键的主表,做起来就有些麻烦了,呵呵,我们还需要借助SQL函数来实现主键的获取工作,当主键插入后,通过SQL函数得到新值,然后再为扩展表赋值,最后一些savechange()就可以了,具体我们看一下代码:

  int maxID = Convert.ToInt32(new TsingDa_NewLearningBarEntities()//当前表最大ID
                  .Database.SqlQuery<decimal>("SELECT IDENT_CURRENT ('Classroom_Info')")
                  .First());
            using (TransactionScope trans = new TransactionScope())
            {
                try
                {
                    db.Entry<Classroom_Info>(entity);
                    db.Set<Classroom_Info>().Add(entity);

                    //绑定学生
                    entity.User_Classroom_R.ToList().ForEach(i =>
                    {
                        i.ClassroomInfoID = maxID + 1;
                        db.Entry<User_Classroom_R>(i);
                        db.Set<User_Classroom_R>().Add(i);
                    });
                    db.SaveChanges();//是否为msdtc就看它提交的次数
                    trans.Complete();
                }
                catch (Exception)
                {
                    trans.Dispose();//出现异常,事务手动释放
                    throw;
                }
            }

而一次savechanges所产生的SQL也是我们可以接受的,与服务器连接池开启一个新连接,然后把语句一条一条的发过去,虽然不是一次性发送,但结果我们也是可以接受的,呵呵。

Xeni+PCPmh5h8ySkjtrQlYfYlluH6iEkM0WYN5+itcc7x5ydCYjn7nOde1QkDjzukTG3d2qY0pgKhyYh5KyglMTkBejoj6AhSocFFBTsi3Rf9zbh7ng/r+og/8afmNznjAbKCQGSjWU9tq9Rs3SbF4KzZ22ZEkmtGfzPukXU/qR5hq+9Zpurpbe6+2NMOlqo9tYURsz90NNr6iKdhxKqW7u2sSlgCEQ8yWR8RCpuTMlneLgCZuxzLci4plSHSh0KohIVmAWFTNBSdswYKPS76M3d6YSnu8ozoZtHJyoj4OvfkfEIZLuic/oE/kXq0hVNNFKEGrTAValKmVrcgFq1AaDBizQOKtu2sWV8JgJWJD5tCJBBVZ8ajZBFn/47+1mCUo/zhevTf0wQrEdtiPtcK8bnrjPg9hbtxz5UcEdXzdDOjZzYVx5CNjySuS3rawVKwp4URwROGC+hyBwdbPBkjYrKbpuAqiYCczrEcka440ciXA5sHNZO2ZsqD/8115N/EUElCHCrjcdADqStpaz57aeHseowYpVXT4IQcEZVYbImVIQxny1XIP8llRssP0AV5JR43yMugipURuyAzYnzgsc0BzoJ4x8ss8wEI9ynnyFWBVbhwl9OXw/zpYESxLeJzrXk7Iyba8FsYkftM/BF9jg9HB3M7IwJPhFXTcHcBP8egK3gyRsQ5IgwSaJVzOyOmQOYDe7qH+43SSYg3eagUwmBwLgRvrfXB+yCGXKGt6B1MPFtxYExs2keMkzFzBk8GC4x0cyWcl5FyRIERMw3WbJG6IDIayfwWfEYVKxawmiPWQJNyMluIhJWBuUIz0j39HDELn9XNreBab6Yc5U9pC54IfxfbYj5XssE7c32MCNMs2VYYURpDnpSLjGjXP+fQyBFLKl+7XHPxj8gR6/OyR2ubhBFhkGkxIluCwoek8MVWuOpKmWswolRPcNb6EL2zjua3MEekjGgdpU/i3eUYMdB3TctCeVly5vzCMn/6Ficvw/cR88K39/MrT8GllXLQZF205W+6gvbmyttlcuvOOeS2ooXVfcS035Z3IL68NfXTY7jMBPaT2sTwVZ97S6i1N4uOvNCfPGVu1rJtQrYnl+vhPoN6XKXzPIdbb6ZAx+7L+4ilreRbSnnNvFEn+EN8FjYaxZ52sFSu6u5cav1Zd1jYvmZzH1FYwpXYl5TpOdLHiDzdiiXope05EsHS//M+Yj5pEsqkIyFE/FcYTmvrPFDOlXspVEphsKSP4H0OWDdvK9WRQi/pCI4DY6Jn1RTg1z9wg/hY8W68/V3T/A7I0rsep7WPdr5l+gn9ip7wmB77PzygXY8Rz/8JfcU78HZGZAZSECHtUFNbMf2E/g4oI5bDRk1NTU1NtmtAGVGhmKYz5ohqaj+ygYP76zDwoCkjKjZAGVFtMBs4uL8OAw+aMqJiA5QR1QazgYP76zDwoLW69n9HovFF/hRdTwAAAABJRU5ErkJggg==" alt="" />

回到目录

发表评论
用户名: 匿名