为什么Database First EF会跳过一些表的映射?

4
我正在使用Entity Framework 4和基于数据库的绑定,但EF没有为我的一些表生成实体。我没有收到任何错误提示,无论我从设计界面上的“从数据库更新模型”弹出菜单中选择多少次要生成的表,同样的表仍然缺失在模型中。
在向导中我没有收到任何错误信息,它们只是没有被生成。有什么线索么?

1
这些表里有主键吗? - Akash Kava
@Akash,可能就是这个模式。看起来那些表中的所有字段都是可空的,所以 EF 可能不能假定一个 PK 值。如果你想把你的评论转换成答案,我会接受它。 - John Kaster
6个回答

9

EF要求表格上有主键。EF不会映射它找不到或推导不出主键的表格。如果所有列都可为空,它就不能假设有主键。如果有一个或多个列不可为空,则EF将明确为表格推导出一个主键。


3

EF将忽略没有主键的表。


小小的澄清 - EF 不会映射找不到或推导出主键的表。如果所有列都可为空,它无法假定一个主键。 - John Kaster
没有问题,EF对可空列没有问题,它只检查主键。而主键不能为可空,因此不考虑可空条件。 - Akash Kava
我能说的就是试一下。如果所有列都可为空,则该表将无声地无法映射。如果有一个或多个列不可为空,则它将派生出一个主键并映射该表。 - John Kaster
从哪里派生主键? - Akash Kava

0

我能想到的选项:

  • 您是否勾选了那些表旁边的框?

  • 您之前是否添加过它们,然后删除了它们的实体但保留了表的缓存?

  • 如果是这样,您可以从实体浏览器窗口中将它们移除并重新添加它们, 或者在映射窗口中手动添加实体并定义它们映射到的表。

  • 也许表被分类为关系而不是实体?

  • 您可以手动添加实体并在映射窗口中选择它们映射到的表。

谢谢你的回复,丹尼。正如我在问题中所指出的,我已经多次尝试通过向导重新映射它们,但它们从未映射成功。当最初创建模型时,我也选择了所有要绑定到模型中的表。如果必须的话,我可能可以为它们创建手动映射,但这并不能回答它们为什么一开始没有被映射的问题,并且对于将来从数据库更新模型也不是一个好兆头。 - John Kaster
尝试从工具箱中添加一个新实体,而不是从向导中添加,并进行映射。 - Danny Varod

0
一个可能性是在使用带有不同字段类型的表时,例如 SQL Server 中的层次结构。

0
实际上,在我的情况下,它不起作用,因为我正在使用一个 hierarchyid 字段作为主键,而 EF 不支持这种字段类型,因此它没有导入表格,因为需要一个有效的 PK。

0

如果在EF中没有主键表,则会自动跳过,否则您需要将一个值设置为非空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接