gpt4 book ai didi

c# - Entity Framework 4,将一个 edmx 文件的上下文扩展到另一个 edmx 文件的上下文

转载 作者:太空宇宙 更新时间:2023-11-03 22:18:57 26 4
gpt4 key购买 nike

我的问题是我们能否在 Entity Framework 4 中将一个上下文扩展到另一个上下文。以下是问题背景。

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

  • 一个项目用于存储候选人的简历信息。
  • 另一个项目用于存储客户信息。
  • 最终项目称为 CORE。这个 CORE 包含一个 edmx 文件,应该由 CV 和 CRM 扩展。

例如,电子邮件地址表可以由客户 (CRM) 和 CV 共享。要与另一个表共享一个表,我们应该能够将一个上下文(CV 上下文)扩展到另一个上下文(客户上下文)。有使用 Entity Framework 经验的人能否与我分享您的经验,看看这是否可行。

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

  1. 具有 core.edmx 的人员类库(核心)- 与人员相关的基本详细信息(姓名、电子邮件)
  2. 带有 CV.edmx 的 CV 类库,其中包含 CV 相关数据(经验、技能)
  3. 拥有客户数据(销售数据...)的客户关系管理系统(CRM)

然后我们要使用核心类库edmx文件(Core.edmx)和cv.edmx(基本上cv表应该可以使用核心表中的表)。 同样,我们希望将 core.edmx 与 CRM.edmx 用于第三个项目

最佳答案

首先,您的 EDMX 不应该(实际上不能)彼此交谈

在 Context -> EDMX -> Database 之间通常是 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 来说这是不可行的。

这样说:

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

你做不到吧? Entity Framework 也不能。 :)

即使所有三个 EDMX/Context 使用相同的数据库,也没关系。

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

HTH

关于c# - Entity Framework 4,将一个 edmx 文件的上下文扩展到另一个 edmx 文件的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3929825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com