首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架4,将一个edmx文件的上下文扩展到另一个edmx文件的上下文

实体框架4,将一个edmx文件的上下文扩展到另一个edmx文件的上下文
EN

Stack Overflow用户
提问于 2010-10-14 03:18:26
回答 1查看 2K关注 0票数 1

我的问题是我们能否在实体框架4中将一个上下文扩展到另一个上下文。下面是问题的背景。

我正在使用EF4开发一个网络应用程序.我的Web应用程序有3个项目。

  • One项目是用来存储候选简历信息的。另一个用于存储客户的information.
  • Final项目称为
  • 。这个核心包含一个edmx文件,应该由CV和CRM扩展。

例如,电子邮件地址表可以由客户(CRM)和简历共享。为了与另一个表共享,我们应该能够扩展一个上下文(CV上下文)和另一个上下文(客户上下文)。是否有人有使用实体框架的经验,与我分享您的经验,以确定这是否可能。

我们在三个类库中有3个edmx文件:

  1. Person类库(Core.edmx)-与个人相关的基本细节(姓名、电子邮件)
  2. CV类库与CV.edmx有相关的简历数据(经验、客户关系管理系统),其中有客户数据(销售数据.)

然后,我们希望将核心类库edmx文件(Core.edmx)与cv.edmx一起使用(基本上cv表应该能够使用来自核心表的表)。同样,我们希望在第三个项目中使用core.edmx和CRM.edmx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-14 05:56:53

首先,您的EDMX不应该(实际上不能)相互通信,

它通常是上下文-> EDMX ->数据库之间的1-1。

一个更好的解决方案是将您的模型封装在存储库后面。

每个聚合根都有一个存储库,它将给您一个PersonRepository、CvRepository、CustomerRepository。

每个DLL都可以公开一个存储库。

然后,您将需要一个“服务层”,它可以与存储库一起工作。类似于“工作单位”。

例如,您可以创建一个CvPersonService,它可以处理与Person (Core)和CV存储库的交互:

代码语言:javascript
复制
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是不可行的。

这样说:

  1. 创建托管在本地PC (DB1)
  2. 上的数据库,创建一个托管在互联网上的数据库。(DB2)
  3. 编写一个查询来连接两个表的结果,一个来自DB1,一个来自DB2.

你做不到,对吧?实体框架也不能。:)

即使所有三个EDMX/Context都使用相同的数据库,也无关紧要。

以上将是一个更好的解决方案-重新架构它的方式,您可以优雅地公开模型通过fluent存储库。

HTH

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3929825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档