与实体框架4.2
本文关键字:框架 实体 | 更新日期: 2023-09-27 18:21:25
我正在从Linq2Sql迁移到实体框架,我真的陷入了一件事。
我有一张桌子MappingSet
。它有一个PK,MappingSetId
。然后我还有一个表XpathMappingSet
,它有相同的PK,MappingSetId
。它既是FK也是PK。
然后我在MappingSet
上有一个属性,它被称为XpathMappingSet
。这是空的,因为XpathMappingSet
表中没有相应的行。
如何配置?我尝试了以下方法,但没有真正奏效:
HasOptional(m => m.XpathMappingSet).WithRequired(m => m.MappingSet).Map(m => m.MapKey("MappingSetId"));
我得到的例外是:
(66,6):错误0019:类型中的每个属性名称都必须是唯一的。已定义属性名称"MappingSetId"。
这一切在L2S中运行良好,但我无法使用实体框架使其工作。
映射集
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);
}
}
映射集的映射
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"));
}
}
不要使用列映射部分。EF计算出映射的属性是PK。
HasOptional(m => m.XpathMappingSet).WithRequired(m => m.MappingSet);
好的,我解决了。
我将xpathmapingset的映射更改为:
public partial class XpathMappingSetMap : EntityTypeConfiguration<XpathMappingSet>
{
public XpathMappingSetMap()
{
ToTable("XpathMappingSets");
HasKey(m => m.XpathMappingSetId);
Property(m => m.XpathMappingSetId).HasColumnName("MappingSetId");
}
}
它不喜欢它有相同的名称