链接表 - 代码优先 - 实体框架 - 表映射

时间:2011-11-13 14:25:26

标签: ef-code-first fluent-interface data-annotations

我之前在这个论坛上问了一个相关的问题。这个问题概述了我采取的步骤,我尝试过的不同事情以及遇到的错误。这可能对某人有帮助。

考虑到映射到涉及链接表的结构,在我看来,Code First,Link Tables和TPH存在一个怪癖,或者可能只是缺乏透明度。

我使用[Table(“”)]属性创建了一个派生类,以将对象映射到以下类型的表结构:

(Case 1) Employees -> Attributes -> AttributeTypes

(Case 2) Employees -> EmployeeAttributeLink -> Attributes -> AttributeTypes

在前一种情况下,我实现了TPH查询和保存所需的结果。 (我使用数据注释属性和流畅的api将派生类映射到正确的鉴别器id列)。

然而,在第二种情况下,我收到此错误: '实体类型A和B不能共享表B,因为它们不在同一类型层次结构中[OR]没有有效的一对一外键关系,它们之间具有匹配的主键。需要有一个1-1对应'

当我查看它试图将类型映射到的表的名称时,我可以看到它很混乱。但是我无法弄清楚我做错了什么,因为我在继承类之上使用了正确的表映射属性(我没有定义可能来自鉴别器的所有子类型 - 这有关系吗?)。

我介绍了一些FK属性,试图解决错误消息中[OR]的第二部分。这导致我出现了新的问题,即无法确定主要/依赖...然后我尝试使用[InverseProperty]属性......然后我开始拔头发。

现在,回滚并删除属性,我决定不依赖于[Table(“”)]属性,并使用流畅的api将类型映射到表中。这似乎有效。

我的问题是:为什么在Fluent API上[Table(“”)]属性和ToTable函数的行为表现不同?我本以为它们可以互换

由于

0 个答案:

没有答案