Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF存储库中的事务范围?_Entity Framework_Repository Pattern - Fatal编程技术网

Entity framework EF存储库中的事务范围?

Entity framework EF存储库中的事务范围?,entity-framework,repository-pattern,Entity Framework,Repository Pattern,我正在使用EF的存储库模式。在我的项目中,我们使用两个数据库,这两个数据库位于两个不同的项目中。任何时候,一个项目都是CoreLib(我们在另一个项目中引用)。我有以下问题 我可以为这两个项目使用一个存储库层吗 如何使用System.Transactions.TransactionScope提供事务安全性? 注意:我使用的是微软的unity框架和UnitOfWork模式 谢谢你的回复。我已经实现了在事务范围内保存上下文更改的功能。每次,它都会抛出以下异常 {"Network access fo

我正在使用EF的存储库模式。在我的项目中,我们使用两个数据库,这两个数据库位于两个不同的项目中。任何时候,一个项目都是CoreLib(我们在另一个项目中引用)。我有以下问题

  • 我可以为这两个项目使用一个存储库层吗
  • 如何使用System.Transactions.TransactionScope提供事务安全性? 注意:我使用的是微软的unity框架和UnitOfWork模式

  • 谢谢你的回复。我已经实现了在事务范围内保存上下文更改的功能。每次,它都会抛出以下异常

    {"Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network access in the security configuration for MSDTC using the Component Services Administrative tool."}
    
    我认为这与MSDTC配置有关,我在客户端和SQL server机器中配置了网络DTC访问。配置如下所示

    Network DTS access  - Enabled.
    Allow Remote Clients    - Enabled.
    Allow Remote Administration – Enabled.
    Allow Inbound   - Enabled.
    Allow outbond   - Enabled.
    No Authentication Required – Enabled.
    
    在配置MSDTC时,我是否缺少什么

    还有一个问题:此配置是否链接到域配置?
    因为在我们的环境中,我的DB服务器没有用它的名称解析(我们使用的是IP地址)。

    您可以这样做。假设您的两个数据库上下文分别命名为
    FirstContext和
    SecondContext`

    public class ContextFacade : IUnitOfWork // your Unit of work interface
    {
      FirstContext _fc;
      SecondContext _sc
      public ContextFacade(FirstContext fc, SecondContext sc)
      {
         _fc = fc;
         _sc = sc;
      }
    
      public void SaveChanges()
      {
        var scope = new TransactionScope(TransactionScopeOption.Required, options);
        using(scope)
        {
          _fc.SaveChanges();
          _sc.SaveChanges()
    
          scope.Complete();
        }
      }
    }
    

    看看如何将所有这些组合在一起。

    您可以这样做。假设您的两个数据库上下文分别命名为
    FirstContext和
    SecondContext`

    public class ContextFacade : IUnitOfWork // your Unit of work interface
    {
      FirstContext _fc;
      SecondContext _sc
      public ContextFacade(FirstContext fc, SecondContext sc)
      {
         _fc = fc;
         _sc = sc;
      }
    
      public void SaveChanges()
      {
        var scope = new TransactionScope(TransactionScopeOption.Required, options);
        using(scope)
        {
          _fc.SaveChanges();
          _sc.SaveChanges()
    
          scope.Complete();
        }
      }
    }
    
    看看如何将所有这些组合在一起

    我可以为这两个项目使用一个存储库层吗

    如何使用System.Transactions.TransactionScope提供事务安全性?注意:我使用的是微软的unity框架和UnitOfWork模式

    根据业务需要在业务层中使用事务划分(在transactionscope中完成一个事务中必须完成的所有工作)

    因为您使用的是UnitOfWork模式

  • 工作单元与事务无关(在db意义上)。工作单元决定ObjectContext的生存期。您可以随意创建TransactionScope。无论是在创建工作单元之后还是之前创建它,这都无关紧要
  • 由于UnityFW是一个ioc容器,因此可以使用业务方法上的属性进行事务划分 关于交易和EF的一些内容:

  • 事务与DbConnections一起工作,与EF没有多大关系
  • 如果所有涉及的驱动程序都支持2阶段提交,则可以在一个事务中混合使用旧的SQL内容和EF内容,甚至可以混合使用多个数据库
  • ObjectContext的SaveChanges将参与全局事务。如果没有全局事务,它将创建一个新事务,保存所有内容并提交或回滚
  • 我可以为这两个项目使用一个存储库层吗

    如何使用System.Transactions.TransactionScope提供事务安全性?注意:我使用的是微软的unity框架和UnitOfWork模式

    根据业务需要在业务层中使用事务划分(在transactionscope中完成一个事务中必须完成的所有工作)

    因为您使用的是UnitOfWork模式

  • 工作单元与事务无关(在db意义上)。工作单元决定ObjectContext的生存期。您可以随意创建TransactionScope。无论是在创建工作单元之后还是之前创建它,这都无关紧要
  • 由于UnityFW是一个ioc容器,因此可以使用业务方法上的属性进行事务划分 关于交易和EF的一些内容:

  • 事务与DbConnections一起工作,与EF没有多大关系
  • 如果所有涉及的驱动程序都支持2阶段提交,则可以在一个事务中混合使用旧的SQL内容和EF内容,甚至可以混合使用多个数据库
  • ObjectContext的SaveChanges将参与全局事务。如果没有全局事务,它将创建一个新事务,保存所有内容并提交或回滚

  • 我已将您未注册的帐户合并到您已注册的帐户中。你现在应该可以编辑你的问题,在个人答案下留下评论,并最终接受对你最有帮助的答案。我已将你未注册的帐户合并到你已注册的帐户中。您现在应该能够编辑您的问题,在个人答案下留下评论,并最终接受对您最有帮助的答案。