与实体框架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"));
    }
}

与实体框架4.2

不要使用列映射部分。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");
    }
}

它不喜欢它有相同的名称