【问题标题】:Invalid column name error with EF 4.1 Code FirstEF 4.1 Code First 出现无效的列名错误
【发布时间】:2013-05-22 22:32:41
【问题描述】:

我已经遇到这个问题大约一天了,我已经搜索并发现他们的解决方案存在类似问题,但无法解决这个问题。

我已经在 Teams 示例中看到了这一点,所以我也会这样做。我有一个Team

public abstract class Team
{
   [Key]
   public int IdTeam { get; set; }
   public string Name { get; set; }
   public string Description { get; set; }
}

我还有一个Match 对象:

public class Match
{
   [Key]
   public int IdMatch { get; set; }
   [ForeignKey("HomeTeam")]
   public int IdHomeTeam { get; set; }
   [ForeignKey("AwayTeam")]
   public int IdAwayTeam { get; set; }

   public virtual Team HomeTeam { get; set; }
   public virtual Team AwayTeam { get; set; }
}

每当我尝试访问任一团队的名称时,都会收到 Invalid column name Team_TeamId 错误。我猜这与 EF 和未正确映射外键有关。我还看到其他人使用 ICollections,但我认为在这种情况下我不需要它们。

【问题讨论】:

  • 我已经编辑了我的答案,看看这是否有效

标签: foreign-keys entity-framework-4.1 code-first


【解决方案1】:

您必须在 OnModelCreating 方法中解决此问题。实体框架似乎无法识别外键,所以必须具体指定。

public class Entities : DbContext
{
    ...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Match>()
            .HasRequired(b => b.AwayTeam)
            .WithMany()
            .HasForeignKey(b => b.IdAwayTeam);
        modelBuilder.Entity<Match>()
            .HasRequired(b => b.HomeTeam)
            .WithMany()
            .HasForeignKey(b => b.IdHomeTeam);
    }
}

有关代码优先的更多信息OnModelCreating,请查看:http://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext.onmodelcreating(v=vs.103).aspx

【讨论】:

  • 为什么团队抽象顺便说一句?团队是否有匹配集合?
  • 不,它没有集合。没有收藏,没有摘要?
  • 这应该可以,试试吧。实体框架不能处理这个标准,我们明确告诉它。
  • 这实际上应该是您的问题的解决方案,您可以尝试将外键更改回来。如果您(临时)删除其中一个外键,也会发生这种情况吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多