2

私は2つのクラスを持っています

public class Project
{
   [Key]
   public int ID { get; set; }
   public string Name { get; set; }
   public int ManagerID { get; set; }
   public int CoordID { get; set; }
   [ForeignKey("ManagerID")]
   public virtual Employee Manager { get; set; }
   [ForeignKey("CoordID")]
   public virtual Employee Coord { get; set; }

}

public class Employee
{
   [Key]
   public int EmpID { get; set; }
   public string Name { get; set; }
   [InverseProperty("ManagerID")]
   public virtual ICollection<Project> ManagerProjects { get; set; }

  [InverseProperty("CoordID")]
   public virtual ICollection<Project> CoordProjects { get; set; }
}

ManagerID と CoordID は、Employee テーブルの EmpID 列にマップされます。EF が正しくマップできないため、無効な列のエラーが発生し続けます。間違った列を探していると思います。

4

2 に答える 2

4

InverseProperty外部キーではなく、関連するナビゲーション プロパティを参照するために使用されると思います。

public class Employee
{
   [Key]
   public int EmpID { get; set; }
   public int Name { get; set; }
   [InverseProperty("Manager")]
   public virtual ICollection<Project> ManagerProjects { get; set; }

   [InverseProperty("Coord")]
   public virtual ICollection<Project> CoordProjects { get; set; }
}

また、名前が文字列ではなく整数である理由はありますか?

于 2013-01-28T21:36:48.223 に答える
0

最良の推測は、 を介してコンテキストで流暢な APIOnModelCreatingを使用することです。列の名前を変更すると、EF はマップする元のオブジェクトを特定できないため、混乱します。ただし、Fluent API では、次のようなものを使用してマップを手動で指定できます。

public class MyContext : DbContext
{
  public DbSet<Employee> Employees { get; set; }
  public DbSet<Project> Projects { get; set; }

  protected override OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Project>()
      .HasRequired(x => x.Manager)
      .WithMany(x => x.ManagerProjects)
      .HasForeignKey(x => x.ManagerID);
    modelBuilder.Entity<Project>()
      .HasRequired(x => x.Coord)
      .WithMany(x => x.CoordProjects)
      .HasForeignKey(x => x.CoordID);
  }
}
于 2013-01-28T21:32:33.527 に答える