3

我们有一个 EF4 EDMX,其中包含约 300 个实体,这些实体用于我们的核心产品套件(从数据库导入的实体)。

当我们获得新客户时,他们往往希望存储额外的信息,并让我们开发超出我们业务领域且完全定制的定制流程。例如,我们与一家安全公司签订了合同,他们希望存储有关其安全级别的信息并拥有在这些级别上起作用的流程。

在每种情况下,我们都需要添加自定义表和/或将自定义字段添加到现有实体。我们有一个很好的方法来使用以前的技术,其中核心类库没有与自定义表等垃圾。我们只是从自定义类库中的核心实体(相当于 EF 中的 EntityObject)继承并根据需要添加自定义。

同样,我们不想将这些自定义表和属性添加到我们的核心 EDMX。我们希望在一个单独的类库中从核心 EDMX 中“继承”一个新的自定义 EDMX,我们可以在其中添加自定义项。继承将允许我们在 Core EDMX 中做我们能做的一切,再加上更多。

我们正在使用 t4 模板根据这篇博文生成我们的存储库(我们没有使用模型优先的方法):

http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx

我们可以根据需要扩展 EDMX 吗?

我们提出了一个骇人听闻的解决方案,即核心实体上的方法扩展,它在单独的 EDMX 中返回一个自定义实体,如下所示:

  public static class CoreEntityExtensions
  {
    public static EntityConnection EntityConnection;

    public static CustomUserEntity CustomUserDetails(this User coreUser)
    {
      ICustomUserEntityRepository customUserRepository = new CustomUserEntityRepository(EntityConnection);
      return customUserRepository.All().SingleOrDefault(u => u.id == coreUser.id);
    }
  }

尽管出于一些明显的原因,这并不理想。

任何帮助深表感谢。

4

1 回答 1

0

我认为对你没有多大帮助,但 NHibernate 可以很容易地做到这一点。我们有与您相同的场景,NH 允许我们跨 DLL 建模而没有任何麻烦。

抱歉,这并不是真正的答案,只是建议阅读本文的其他人考虑替代方案。

于 2011-04-05T20:49:26.613 回答