Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 实体框架模型中的共享实体_.net_Entity Framework_Project_Edmx - Fatal编程技术网

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

.net 实体框架模型中的共享实体,.net,entity-framework,project,edmx,.net,Entity Framework,Project,Edmx,我有3个(将来可能会更多)彼此不同的大型项目,但是它们都有大约15多个相同的表(用户、角色、用户首选项、用户日志等等)。这些公共表上的任何更改以及实体上的更改始终适用于所有项目 到目前为止,每个项目都有一个单独的EDMX,它为每个项目复制这些实体。对这些公共实体或表的任何更改都需要将相同的更改复制3次 有没有办法在单独的项目中定义这些实体,然后在每个项目中重用它们 请记住,这些共享实体与每个项目中的其他实体有关系(这是每个项目特有的信息) 我想做的是在EDMX中引用一个对象(来自另一个EDMX)

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

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

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

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

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

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

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


我有一个类似的设置与OData现在和它的作品伟大!当然,那是在微软推出新的Web API架构之前。这里有一个关于它的快速教程()

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

我可以想象,合并模型和定义类之间的关联应该是可能的,但是是的

因此,在使用edmx时,最好在项目中分别使用这两个模型,并在适用的情况下使用内存(linq到对象)联接。恐怕不是最有效的解决办法


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

然后如何在实体和API之间创建关系?正如我所说,我使用的是OData,因此它只是一个服务引用;根据您对共享数据所做的操作,您可能只需要从webapi返回json就可以了!