0

MVC3 プログラムのデータを格納する 3 つのテーブルがあります (説明のためにサンプル テーブルを作成しました)。

ここに画像の説明を入力

私はEntity Frameworkを使用していますが、これらのテーブルを接続する方法がわからないので、次のようになります:

    public class TableABC
{ 
    public int Id { get; set; }

    public string Name { get; set; }

    public string Surname { get; set; }

    public List<string> Colours { get; set; }

    public List<string> Pets { get; set; }
}

これは「エンティティ分割」と呼ばれ、それらのテーブルをマップする必要があることがわかりましたが、開始方法がまったくわかりません。

助けてくれてありがとう。

4

1 に答える 1

0

プリミティブ型をテーブルにマップすることはできないため、文字列リストの代わりに別のエンティティを使用する必要があります。

public class TableABC
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
    public virtual List<Colour> Colours { get; set; }
    public virtual List<Pet> Pets { get; set; }
}

public class Colour
{
    public int Id { get; set; }
    public string Value { get; set; }
}

public class Pet
{
    public int Id { get; set; }
    public string Name { get; set; }
}

マッピングは次のとおりです (カスタム DbContext の OnModelCreating メソッドをオーバーライドしてマッピングを提供します)。

modelBuilder.Entity<TableABC>().Property(t => t.Name).HasColumnName("name");
modelBuilder.Entity<TableABC>().Property(t=>t.Surname).HasColumnName("surname");
modelBuilder.Entity<TableABC>()
    .HasMany(t => t.Colours).WithRequired().HasForeignKey(c => c.Id);
modelBuilder.Entity<TableABC>()
    .HasMany(t => t.Pets).WithRequired().HasForeignKey(p => p.Id);

modelBuilder.Entity<Colour>().Property(c => c.Value).HasColumnName("colours");
modelBuilder.Entity<Colour>().HasKey(c => new { c.Id, c.Value });
modelBuilder.Entity<Pet>().Property(p => p.Name).HasColumnName("pets");
modelBuilder.Entity<Pet>().HasKey(c => new { c.Id, c.Name });

色とペットに複合キーを使用したため、すべてのレコードで一意である必要があることに注意してください。

于 2013-09-10T22:46:35.583 に答える