Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
C# 从多个数据库水合域模型_C#_Design Patterns_Domain Driven Design_Repository Pattern - Fatal编程技术网

C# 从多个数据库水合域模型

C# 从多个数据库水合域模型,c#,design-patterns,domain-driven-design,repository-pattern,C#,Design Patterns,Domain Driven Design,Repository Pattern,我有一个分层设计的应用程序,如下所示 Project.Common // Domain models Project.DataAccess // Repositories, Persistence models Project.Services Project.Web // Presentation Layer Servicesproject使用UnitOfWork类(在DataAccessproject中定义)查询数据库。DataAccess中的存储库返回Comm

我有一个分层设计的应用程序,如下所示

Project.Common      // Domain models
Project.DataAccess  // Repositories, Persistence models
Project.Services
Project.Web         // Presentation Layer
Services
project使用
UnitOfWork
类(在
DataAccess
project中定义)查询数据库。
DataAccess
中的存储库返回
Common
项目中定义的域模型。
UnitOfWork
类采用连接枚举来连接到不同的数据库

当我需要填充数据来自不同数据库(不同的db服务器)的域模型时,我遇到了一个问题。我该怎么做

似乎我必须查询单独的存储库,每个存储库返回一个域对象(不是持久性对象,因为它暴露于服务层)。然后在服务层从简单的域对象构建更复杂的域对象。这是正确的方法吗

查询数据库的
服务
层中的示例代码

using (var unitOfWork = new UnitOfWork(DatabaseConnection.MyDbServer1, requireTransaction: false))
{
    var repo = RepositoryFactory.GetRepository<IMyRepository>(unitOfWork);
    IEnumerable<MyDomainObject> output = repo.GetData();
}
使用(var unitOfWork=newunitofwork(DatabaseConnection.MyDbServer1,requireTransaction:false))
{
var repo=RepositoryFactory.GetRepository(unitOfWork);
IEnumerable输出=repo.GetData();
}

如果您的业务逻辑需要来自多个持久性模型(数据库)的信息,那么定义一个新的服务模型(在
Project.Services
中)将这些信息包装在一个对象中是非常有意义的。然后,您的服务层中会有一个相应的方法,该方法将通过查询基础存储库返回此模型。

My repos检索持久性模型(位于
Project.DataAccess
)并返回域模型(位于
Project.Common
)。因此,我应该使用这些域模型在
Project.Services
中定义一个新的服务模型,或者在
Project.Common
中创建一个更复杂的域模型?您可以使用这些域模型来构建一个更复杂的服务模型。