【问题标题】:Shared Entities in Entity Framework Model实体框架模型中的共享实体
【发布时间】:2013-01-09 20:57:03
【问题描述】:

我有 3 个(将来可能更多) 个彼此完全不同的大型项目,但是它们都有大约 15+ 个表格 >(用户、角色、用户首选项、用户日志...等)。这些公用表上的任何更改以及实体上的更改始终适用于所有项目。

到目前为止,每个项目都有一个单独的EDMX,它复制每个项目的这些实体。对这些公共实体或表的任何更改都需要将相同的更改复制 3 次。

有没有办法在单独的项目中定义这些实体,然后在每个项目中 reuse 它们?

请记住,这些共享实体与每个项目中的其他实体都有关系(这是每个项目特定的信息)

我想做的是在EDMX 中引用一个对象(来自另一个EDMX) 而不仅仅是tables/views/sps (据我所知这是不可能的)

注意: 我在 ADO.NET 上找到了一些较旧的博客,但到目前为止我还没有找到任何真正的解决方案。

【问题讨论】:

    标签: .net entity-framework project edmx


    【解决方案1】:

    我会为共享资源建立一个 API,每个需要这些资源的项目都可以使用该 API。共享资源将拥有自己的项目和这些实体的 1 个 edmx。这样,您总是对这些共享资源进行一次更改,并且所有三个都得到更新。缺点是您不能像现在这样一次引入这些更改,但是我非常赞成易于维护和减少重复代码!

    我现在使用 OData 进行了类似的设置,效果很好!当然那是在 MS 推出新的 Web API 架构之前。这是一个关于它的快速教程 (http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api)

    【讨论】:

    • 您将如何在实体和 API 之间创建关系?
    • 就像我说的,我使用的是 OData,所以它只是一个服务参考;并且根据您对共享数据的处理操作,您可能只需从 webapi 返回 json!
    【解决方案2】:

    您不能在不同 EF 模型的对象之间进行引用。原因是 EF 会尝试在 SQL 连接时解析关联,因此它需要所有涉及的类的映射信息。

    做梦我可以想象应该可以合并模型并定义它们的类之间的关联,但是是的....

    因此,在使用 edmx 时,您能做的最好的事情就是在您的项目中分别使用这两个模型,并在适用的情况下使用内存中(linq 到对象)连接。恐怕不是最高效的解决方案。

    如果您可以切换到code-first,您可以在单独的类库中拥有公共类,并配备现成的EntityTypeConfiguration 类并在您的项目中使用这些类。那么只需要引用通用类库,将类型配置的实例添加到本地项目的DbContext类即可。您甚至可以将关联映射到公共类,只要外键是本地模型的一部分。 (当然你不能在共享类中添加外键字段)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多