这个代码也没有问题,在一个插入动作完成后,系统由SaveChanges方法完成一次提交,正是由于这样的代码,所以我们的麻烦就来了,如果是对两个表的操作吗?
什么问题?数据一致性不能保证,因为没有事务块,呵呵,加上了再看看
注意:系统触发分布式事务的前提是你的WEB服务器与数据库服务器分别部署在两个服务器上,一台不会出现这个问题的。
OK,这个MSDTC是怎么一回事,不是今天要说的重要,如果想学习MSDTC,请看我的这些文章:
第二十六回 将不确定变为确定~transactionscope何时提升为分布式事务?
第二十七回 将不确定变为确定~transactionscope何时提升为分布式事务~续
第二十八回 将不确定变为确定~transactionscope何时提升为分布式事务~再续(避免引起不必要的MSDTC)
第二十九回 将不确定变为确定~transactionscope何时提升为分布式事务~大结局
而一次savechanges所产生的SQL也是我们可以接受的,与服务器连接池中开启一个新连接,然后把语句一条一条的发过去,虽然不是一次性发送,但结果我们也是可以接受的,呵呵。
看了xiashengwang的 回复,我自己去试了一下,果然savechange将当前上下文中所有要提交的东西包在了一个事务块里,出现异常后,自动完成callback,所以,对 于一个数据库来说TransactionScope可以省去,而对于多个数据库的操作,才需要使用TransactionScope,而对于何时将 TransactionScope提升为MSDTC的级别,到目前为止,我只能说,一个上下文的savechanges不会提升,多个 savechanges就会提升到msdtc,而矛盾是,一个savechanges的话,确实不需要外加TransactionScope块了,呵呵, 这部分文章估计我还要继续写了,看看有没有办法在同一上下文多个savechanges操作时,不让系统提升到MSTDC的级别,呵呵。
联系客服