Entity framework EF存储库中的事务范围?
我正在使用EF的存储库模式。在我的项目中,我们使用两个数据库,这两个数据库位于两个不同的项目中。任何时候,一个项目都是CoreLib(我们在另一个项目中引用)。我有以下问题Entity framework EF存储库中的事务范围?,entity-framework,repository-pattern,Entity Framework,Repository Pattern,我正在使用EF的存储库模式。在我的项目中,我们使用两个数据库,这两个数据库位于两个不同的项目中。任何时候,一个项目都是CoreLib(我们在另一个项目中引用)。我有以下问题 我可以为这两个项目使用一个存储库层吗 如何使用System.Transactions.TransactionScope提供事务安全性? 注意:我使用的是微软的unity框架和UnitOfWork模式 谢谢你的回复。我已经实现了在事务范围内保存上下文更改的功能。每次,它都会抛出以下异常 {"Network access fo
谢谢你的回复。我已经实现了在事务范围内保存上下文更改的功能。每次,它都会抛出以下异常
{"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将参与全局事务。如果没有全局事务,它将创建一个新事务,保存所有内容并提交或回滚
我已将您未注册的帐户合并到您已注册的帐户中。你现在应该可以编辑你的问题,在个人答案下留下评论,并最终接受对你最有帮助的答案。我已将你未注册的帐户合并到你已注册的帐户中。您现在应该能够编辑您的问题,在个人答案下留下评论,并最终接受对您最有帮助的答案。