与实体框架4.2一对一

时间:2012-01-26 14:32:53

标签: c# entity-framework

我正在从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"));
    }
}

2 个答案:

答案 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");
    }
}

它不喜欢它具有相同名称的事实