实体框架模型中的共享实体

时间:2013-01-09 20:57:04

标签: .net entity-framework project edmx

我有3个(以后可能更多)大型项目彼此完全不同但是 15+表周围都有共同的(用户,角色,UserPreferences,UserLog等)。对这些公共表的任何更改以及对实体的更改始终适用于所有项目。

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

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

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

我想要做的是EDMX引用一个对象(来自另一个EDMX)而不仅仅是tables/views/sps (我尽可能告诉是不可能的)

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

因此,在使用edmx时,您可以做的最好的事情是在项目中单独使用两个模型,并在适用的地方使用内存(linq到对象)连接。我担心的不是最有效的解决方案。

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