C# 实体框架4,将一个edmx文件的上下文扩展到另一个edmx文件的上下文
我的问题是,我们能否在实体框架4中将一个上下文扩展到另一个上下文。以下是问题的背景 我正在使用EF4开发一个Web应用程序。我的Web应用程序有3个项目C# 实体框架4,将一个edmx文件的上下文扩展到另一个edmx文件的上下文,c#,.net,asp.net,entity-framework,asp.net-mvc-2,C#,.net,Asp.net,Entity Framework,Asp.net Mvc 2,我的问题是,我们能否在实体框架4中将一个上下文扩展到另一个上下文。以下是问题的背景 我正在使用EF4开发一个Web应用程序。我的Web应用程序有3个项目 其中一个项目用于存储候选人简历信息 另一个项目是存储客户信息 最后一个项目叫做核心。此核心包含一个edmx文件,该文件应由CV和CRM扩展 例如,电子邮件地址表可以由客户(CRM)和简历共享。要将一个表与另一个表共享,我们应该能够用其他上下文(客户上下文)扩展一个上下文(CV上下文)。请有使用实体框架经验的人与我分享您的经验,看看这是否可行
- 其中一个项目用于存储候选人简历信息李>
- 另一个项目是存储客户信息
- 最后一个项目叫做核心。此核心包含一个edmx文件,该文件应由CV和CRM扩展李>
同样,我们希望在第三个项目中使用core.edmx和CRM.edmx首先,您的edmx不应该(实际上不能)彼此交谈 它通常是上下文->EDMX->数据库之间的1-1 更好的解决方案是将模型封装在存储库后面 每个聚合根目录一个存储库将为您提供PersonRepository、CvRepository和CustomerRepository 每个DLL可以公开一个存储库 然后,您需要一个“服务层”,它可以与存储库一起工作。类似于“工作单元” 例如,您可以创建一个CvPersonService,它可以处理与Person(核心)和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是不可行的
这样说:
HTH首先,您的EDMX不应该(实际上不能)彼此交谈 它通常是上下文->EDMX->数据库之间的1-1 更好的解决方案是将模型封装在存储库后面 每个聚合根目录一个存储库将为您提供PersonRepository、CvRepository和CustomerRepository 每个DLL可以公开一个存储库 然后,您需要一个“服务层”,它可以与存储库一起工作。类似于“工作单元” 例如,您可以创建一个CvPersonService,它可以处理与Person(核心)和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是不可行的
这样说:
HTH你是说你有两个独立的EDMX文件,你想“共享”它们吗?“两个模块”是什么意思?两级图书馆?请重新回答你的问题。(同时提及您使用的EF版本)是的,我在3个项目中有3个edmx文件。其中一个edmx文件是colled Core,另外两个是CV和CRM,我想将Core继承到中CV@Kltis-我还是不明白。你想达到什么目标?我们需要比“扩展上下文”更多的信息。上下文适用于一个EDMX。您好,RPM1984,感谢您关注此问题,我们已更新了我们的问题,请参阅主要问题的底部。@Kltis-请参阅答案,如果您需要更多信息,请告诉我。您是说您有两个单独的EDMX文件,并且您想“共享”它们吗?“两个模块”是什么意思?两级图书馆?请重新回答你的问题。(同时提及您使用的EF版本)是的,我在3个项目中有3个edmx文件。其中一个edmx文件是colled Core,另外两个是CV和CRM,我想将Core继承到中CV@Kltis-我还是不明白。你想干什么