我正在从Linq2Sql迁移到Entity Framework,我真的陷入了一件事。
我有一张桌子MappingSet
。哪个有PK,MappingSetId
。然后我还有一个表XpathMappingSet
,它具有相同的PK,MappingSetId
。它既是FK又是PK。
那时我在MappingSet
上有一个名为XpathMappingSet
的属性。如果XpathMappingSet
表中没有对应的行,则为null。
我该如何配置?我尝试了以下内容,但这并没有真正起作用:
HasOptional(m => m.XpathMappingSet).WithRequired(m => m.MappingSet).Map(m => m.MapKey("MappingSetId"));
我得到的例外是:
(66,6):错误0019:类型中的每个属性名称必须是唯一的。已定义属性名称“MappingSetId”。
这在L2S中运作良好但我无法使用Entity Framework工作。
MappingSet
public partial class MappingSet : BaseEntity
{
public int MappingSetId { get; set; }
public virtual XpathMappingSet XpathMappingSet { get; set; }
}
XpathMappingSet
public partial class XpathMappingSet
{
public int MappingSetId { get; set; }
public virtual MappingSet MappingSet { get; set; }
}
XpathMappingSet的映射
public partial class XpathMappingSetMap : EntityTypeConfiguration<XpathMappingSet>
{
public XpathMappingSetMap()
{
ToTable("XpathMappingSets");
HasKey(m => m.MappingSetId);
}
}
MappingSet的映射
public partial class MappingSetMap : EntityTypeConfiguration<MappingSet>
{
public MappingSetMap()
{
ToTable("MappingSets");
HasKey(m => m.MappingSetId);
HasOptional(m => m.XpathMappingSet).WithRequired(m => m.MappingSet).Map(m=>m.MapKey("MappingSetId"));
}
}
答案 0 :(得分:0)
不要使用列映射部分。 EF计算出映射的属性是PK。
HasOptional(m => m.XpathMappingSet).WithRequired(m => m.MappingSet);
答案 1 :(得分:0)
好的,我解决了。
我将xpathmappingset的映射更改为:
public partial class XpathMappingSetMap : EntityTypeConfiguration<XpathMappingSet>
{
public XpathMappingSetMap()
{
ToTable("XpathMappingSets");
HasKey(m => m.XpathMappingSetId);
Property(m => m.XpathMappingSetId).HasColumnName("MappingSetId");
}
}
它不喜欢它具有相同名称的事实