EF 4.1 Code First的列名称错误无效

时间:2013-05-22 22:32:41

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

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

我已经在团队示例中看到了这一点,所以我也会这样做。我有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,但我认为在这种情况下我不需要它们。

1 个答案:

答案 0 :(得分: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