2

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

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

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

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

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

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

4

2 回答 2

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

于 2013-01-09T21:00:26.810 回答
1

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

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

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

如果您可以切换到代码优先,您可以在一个单独的类库中拥有公共类,完成现成的EntityTypeConfiguration类并在您的项目中使用它们。然后就是引用通用类库,将类型配置的实例添加到DbContext本地项目的类中。您甚至可以将关联映射到公共类,只要外键是本地模型的一部分。(当然,您将无法将外键字段添加到共享类)。

于 2013-01-10T21:27:40.277 回答