我的问题是我们能否在实体框架4中将一个上下文扩展到另一个上下文。下面是问题的背景。
我正在使用EF4开发一个网络应用程序.我的Web应用程序有3个项目。
例如,电子邮件地址表可以由客户(CRM)和简历共享。为了与另一个表共享,我们应该能够扩展一个上下文(CV上下文)和另一个上下文(客户上下文)。是否有人有使用实体框架的经验,与我分享您的经验,以确定这是否可能。
我们在三个类库中有3个edmx文件:
然后,我们希望将核心类库edmx文件(Core.edmx)与cv.edmx一起使用(基本上cv表应该能够使用来自核心表的表)。同样,我们希望在第三个项目中使用core.edmx和CRM.edmx
发布于 2010-10-14 05:56:53
首先,您的EDMX不应该(实际上不能)相互通信,。
它通常是上下文-> EDMX ->数据库之间的1-1。
一个更好的解决方案是将您的模型封装在存储库后面。
每个聚合根都有一个存储库,它将给您一个PersonRepository、CvRepository、CustomerRepository。
每个DLL都可以公开一个存储库。
然后,您将需要一个“服务层”,它可以与存储库一起工作。类似于“工作单位”。
例如,您可以创建一个CvPersonService,它可以处理与Person (Core)和CV存储库的交互:
using PersonRepository;
using CvRepository;
public class CvPersonService
{
public CvPerson GetHydratedCvPersonFromTwoRepositories()
{
var person = personRepository.Find(1); // get a person
var cv = cvRepository.Find(1); // get a cv
return new CvPerson { ThePerson = person, TheCv = cv };
}
}需要注意的是,EF对数据库连接和上下文不作任何假设。与特定上下文相关联的数据库可以位于本地机器、开发服务器或云上。EF不知道(或不关心)数据库在哪里。您的配置中的SQLProvider指定了以下内容。EF必须假设它可能在任何地方。
因此,您不能真正将查询从一个上下文“连接”到另一个上下文。这怎么做呢?也许在“旧式”中,您可以使用链接服务器,但这样的ORM是不可行的。
这样说:
。
你做不到,对吧?实体框架也不能。:)
即使所有三个EDMX/Context都使用相同的数据库,也无关紧要。
以上将是一个更好的解决方案-重新架构它的方式,您可以优雅地公开模型通过fluent存储库。
HTH
https://stackoverflow.com/questions/3929825
复制相似问题