好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

EF5.0中的跨数据库操作

Seal_Services { public class seal_testServer : BaseServer<seal_test> , Iseal_usersServer { public void TTTT() { try { seal_test test = new seal_test() { name = " 1111 " , age = 1 }; base .AddEntity(test); base .db.SaveChanges(); BaseUCMSServer <au_Role> ucmsserver = new BaseUCMSServer<au_Role> (); au_Role role = new au_Role(); role = ucmsserver.FindEntitie(c => c.id == 7 ); role.id = 10 ; // 作异常 role.role_name = " BBBBBBBBBBB " ; ucmsserver.UpdateEntity(role); ucmsserver.db.SaveChangesForUCMS(); } catch (System.Exception ex) { throw ex; } } } }

3) 这段代码是有问题的,当要同时操作不同数据库,且有数据有效性的时候,就会发现前面的一个成功了,后面的一个失败了。怎么办呢?EF的事务机制显然已经满足不了程序的要求了,怎么办呢?加TransactionScope吧。

4) 于是乎就有了这样一段代码:

 namespace   Seal_Services
{
      public   class  seal_testServer : BaseServer<seal_test> , Iseal_usersServer
    {
          public   void   TTTT()
        {
              using  (TransactionScope scope =  new   TransactionScope())
            {
                  try  
                {
                    seal_test test  =  new   seal_test()
                    {
                        name  =  "  1111  "  ,
                        age  =  1  
                    };
                      base  .AddEntity(test);
                      base  .db.SaveChanges();
                    BaseUCMSServer <au_Role> ucmsserver =  new  BaseUCMSServer<au_Role> ();
                    au_Role role  =  new   au_Role();
                    role  = ucmsserver.FindEntitie(c => c.id ==  7  );
                    role.role_name  =  "  BBBBBBBBBBB  "  ;
                    ucmsserver.UpdateEntity(role);
                    ucmsserver.db.SaveChangesForUCMS();

                    scope.Complete();
                }
                  catch   (System.Exception ex)
                {
                      throw   ex;
                }
            }
        }
    }
} 

5) 可还是有问题呀,在处理第二个Server时会抛出异常[  基础提供程序在 Open 上失败 ]。然而可以肯定的是,数据库链接字符串是正确的。可却报错了,这是为什么呢?【这是我电脑环境上的一个坑】

6) 经过分析(翻了无数百度相同的转贴后...),想到了,会不会有SQL配置相关?导致了TransactionScope的使用失败?

7) 打开 Sql Server Configuration Manager时,我看到SQL Server服务,显示的是: 远程过程调用失败 。这个???既然失败,那就让它正确。于是:打开 控制面板-卸载 找到 Express LocalDB 。坚定的将其【卸载】。返回程序中,再执行。结果是......成功啦!!!

 

后记 :

  1)在EF中使用跨数据库操作,可以考虑使用这里提供的[ 建立多个ADO.NET实体数据模型 ]的思路。在做TransactionScope事务时,一定要注意[ Express LocalDB ]。

  2)在解决EF跨数据库操作的过程中,还考虑了[ SQL同义词 ]的。但事实证明,这是完全行不通的做法,无论是在EF5.0,还是EF6.0中。

问题环境 :Win8.1, Sql Server 2008 R2, Visual Studio 2013 Professional 2013 Update3

 

EF5.0中的跨数据库操作

标签:

查看更多关于EF5.0中的跨数据库操作的详细内容...

  阅读:27次