【问题标题】:Why is my EF CodeFirst configuration not using the specified foreign key property?为什么我的 EF CodeFirst 配置不使用指定的外键属性?
【发布时间】:2011-06-20 16:34:10
【问题描述】:

我有以下型号:

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'.

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

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

【问题讨论】:

  • 您确定要应用Hotfix类的配置吗?这个 sn-p 看起来是正确的。
  • 是的。我的DBContext.OnModelCreating() 正在调用modelBuilder.Configurations.Add(new hotfixMap()),这是第二个sn-p 来自的映射配置类
  • @Ladislav Mrnka 如果您没有注意到我的更新(并且感兴趣),我发现了导致此问题的错误。

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


【解决方案1】:

好吧,我终于想通了,显然这是由于一些代码没有显示。当存在未映射的额外属性时,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 配置映射类中没有关系映射,但由于某种原因,这一额外属性导致整个修补程序配置被忽略。只需从 ReleaseVersion POCO 中删除 hotfixes2 属性,我的应用程序就可以正常工作而不会出现错误。

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多