如何解决EF 4.1中具有多个可为空的标识符的表中每个层次的表布局问题
|| 我有一个带有int PK,一个NOT NULL字段和两个NULL字符串字段的表。 当我在EF中设置TPH风格的设计时,我是这样设置的: 顶级类型仅具有PK和NOT NULL字段。 第一级将第一个可为空的字段检查为鉴别符。结果为非null的类型是abstract。我相应地映射该字段。 我对第二个字段再次执行此操作,再次映射不为null的位置。我在映射的字段上设置了nullable = false。<EntitySetMapping Name=\"Items\">
<EntityTypeMapping TypeName=\"IsTypeOf(Model1.Item)\">
<MappingFragment StoreEntitySet=\"Items\">
<ScalarProperty Name=\"ID\" ColumnName=\"ID\" />
<ScalarProperty Name=\"OtherID\" ColumnName=\"OtherID\" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName=\"IsTypeOf(Model1.BothNullItem)\">
<MappingFragment StoreEntitySet=\"Items\">
<ScalarProperty Name=\"ID\" ColumnName=\"ID\" />
<Condition ColumnName=\"FirstNullField\" IsNull=\"true\" />
<Condition ColumnName=\"NullField2\" IsNull=\"true\" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName=\"IsTypeOf(Model1.FirstFieldNull)\">
<MappingFragment StoreEntitySet=\"Items\">
<ScalarProperty Name=\"ID\" ColumnName=\"ID\" />
<ScalarProperty Name=FirstNullField\" ColumnName=\"FirstNullField\" />
<Condition ColumnName=\"FirstNullField\" IsNull=\"false\" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName=\"IsTypeOf(Model1.NotNullSubItem1)\">
<MappingFragment StoreEntitySet=\"Items\">
<ScalarProperty Name=\"ID\" ColumnName=\"ID\" />
<Condition ColumnName=\"NullField2\" IsNull=\"true\" />
</MappingFragment>
</EntityTypeMapping>
<EntityTypeMapping TypeName=\"IsTypeOf(Model1.NotNullSubItem2)\">
<MappingFragment StoreEntitySet=\"Items\">
<ScalarProperty Name=\"ID\" ColumnName=\"ID\" />
<ScalarProperty Name=\"NullField2\" ColumnName=\"NullField2\" />
<Condition ColumnName=\"NullField2\" IsNull=\"false\" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
我得到“具有不同键的两个实体被映射到同一行。”
我认为这是因为孩子可能不会继承第一项的非null属性。
我创建了第三种类型来尝试处理NullField1为null和NullField2不为null的情况(这在我的数据库中不会发生,我有一个约束),但是即使我添加了它也不会\'工作。
在2个子孩子中的任何一个上显式添加not null条件需要我映射该列,即使我将其映射到一些无关的属性上也仍然行不通。
\“ BothNullItem \”的条件组合均无效。
有任何想法吗?
解决方法
遗憾的是,我最终放弃了尝试让鉴别符列通过继承进行传播,因此我创建了3个视图,一个顶层,一个用于null字段1和非null字段1,然后在非null字段1上,我使field2成为鉴别符EF中的列。这听起来像是对我的问题的cr脚回答,所以我想听听某人的消息,以了解这笔交易是什么。布勒?
更新:已修复!我在msdn(http://msdn.microsoft.com/zh-cn/library/cc716779.aspx)上找到的一篇文章中讲解了水平分区的概念,然后我在msl中手动添加了条件。看来您无法从设计者那里自动进行这项工作。对于那些想知道的人,请在xml编辑器中打开edmx,然后向下查看映射的conditions元素。在需要的地方添加其他条件(显然条件不是从父实体继承的,因此您必须手动将其添加到子实体)并进行编译!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。