4

EFコードファーストのアプローチを使用していて、リンク(マップ)テーブルを追加したいと思います。以下の例を実行していると、次のエラーが発生します。

System.Data.Entity.Edm.EdmEntityType: : EntityType 'EmployeeDepartmentLink' has no key defined. Define the key for this EntityType.

問題は、このテーブルにキーが必要ないことです。これは、2つのテーブルを一緒にマップするだけです。

public class Employee
{
    [Key()]
    public int EmployeeID;
    public string Name;
}

public class Department
{
    [Key()]
    public int DepartmentID;
    public string Name;
}

public class EmployeeDepartmentLink
{
    public int EmployeeID;
    public int DepartmentID;
}

「[Key()]」属性を追加するなど、さまざまなことを試しましたが、使用しても意味がありません。どのフィールドに追加しますか?この種のテーブルモデルもサポートされているのだろうか?

4

2 に答える 2

15

「多対多」マッピングを作成しようとしています。

これを実行するには、次のコードを記述します。

public class Employee
{
    [Key]
    public int EmployeeId;
    public string Name;
    public List<Department> Departments { get; set; }

    public Employee()
    {
        this.Departments = new List<Department>();
    }
}

public class Department
{
    [Key]
    public int DepartmentId;
    public string Name;

    public List<Employee> Employees { get; set; }

    public Department()
    {
        this.Employees = new List<Employee>();
    }
}

次に、あなたのDbContext

public class YourContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }
    public DbSet<Department> Departments { get; set; }

    public YourContext() : base("MyDb")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Department>().
            HasMany(c => c.Employees).
            WithMany(p => p.Departments).
            Map(
                m =>
                {
                    m.MapLeftKey("DepartmentId");
                    m.MapRightKey("EmployeeId");
                    m.ToTable("DepartmentEmployees");
                });
    }
}
于 2013-01-21T15:34:10.977 に答える
2

M:M relationship結合(リンク)クラスを作成する必要があるのは以下のとおりです。

public class EmployeeDepartmentLink
{
    [Key, Column(Order = 0)]
    public int EmployeeID;

    [Key, Column(Order = 1)]
    public int DepartmentID;

}

詳細については、Create code first, many to many を確認してください

これがお役に立てば幸いです。

于 2013-01-21T14:50:36.627 に答える