为什么我的EF Code First配置不使用指定的外键属性?

时间:2011-06-20 16:34:11

标签: entity-framework ef-code-first code-first

我有以下型号:

public class Hotfix
{
    public int? released_version { get; set; }
    public virtual ReleaseVersion ReleasedVersion { get; set; }
}

在我的映射类(正确查看)中,我有:

            this.Property(t => t.released_version).HasColumnName("released_version");
        this.HasOptional(t => t.ReleasedVersion)
            .WithMany(t => t.ReleaseVersionForHotfix)
            .HasForeignKey(d => d.released_version);

但是,当我执行_context.Hotfixes.ToList()之类的查询时,我会收到异常Invalid column name 'ReleaseVersion_id'.

当它被告知列应该映射到ReleaseVersion_id时,为什么要查找released_version列?

这是在现有数据库上使用CodeFirst

1 个答案:

答案 0 :(得分:0)

好的,我终于弄明白了,显然这是由于某些代码未显示。当存在未映射的额外属性时,EF的流畅映射中似乎存在错误。我应该展示ReleaseVersion结构,看起来像:

public class ReleaseVersion
{
    public int id { get; set; }

    public virtual ICollection<Hotfix> CurrentVersionForHotfix { get; set; }
    public virtual ICollection<Hotfix> ReleaseVersionForHotfix { get; set; }
    public virtual ICollection<Hotfix> hotfixes2 { get; set; }
}

额外的hotfixes2属性有什么重要意义。这个属性是由EF 4.1 CodeFirst电动工具创建的,但是我没有删除它,因为我想让一切工作都先工作。

无论如何,hotfixes2属性在修补程序EF配置映射类中没有关系映射,但由于某种原因,这一个额外属性导致整个修补程序配置被拒绝。只需从hotfixes2 POCO中删除ReleaseVersion属性,即可使我的应用程序正常工作而不会出现错误。