我在实体框架的仅代码模型中遇到“基本类型”的问题很多。我在实体框架的仅代码模型中的'基本类型'遇到了很多麻烦。
当我尝试使用带有DbContext
的{{1}}运行此代码时,出现以下错误。
A导航属性'Flags'映射到两个不同的连接表'page.flags'和'template.flags'。只能存在导航属性的一个映射
这对我说的是我无法映射继承的属性。这对很多面向对象的代码设计来说非常突破。有没有已知的补救措施?我意识到我可以使布局非抽象,并为它提供支持,但很明显这不是域模型的意图。抽象类是基础,而不是存储的模型。
我想补充一点,如果我将DbSet<Template>
放在IList<Flag>
类中,则此代码会运行。即使通过继承,Template
字段仍然有效。我不明白为什么会这样。有人可以开导我吗?
Id
答案 0 :(得分:1)
当您为Template实体使用基类型时,您还必须在映射中对此继承进行建模。这意味着您必须为Layout编写配置,该配置将映射Id和Flags以及将映射Name的Template的配置。在EF中有几种映射继承的方法。您应该检查Table per Hiearchy。
修改:根据您的评论,您正在寻找Table per Class + examples for CTP4。
编辑2:好的。我使用抽象父类中定义的导航属性测试了您的场景,如果您尝试将其映射到多个表,它确实不起作用。