7

私は次のような単純なオブジェクトモデルを持っています...

public class Product
{
    public long ProductId { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

public class Category
{
    public long CategoryId { get; set; }
    public List<Product> Products { get; set; }
}

EntityFrameworkを使用して基になるデータベースを生成すると、次のスキーマが作成されます。

製品

  • 製品番号
  • CategoryId
  • Category_CategoryId

カテゴリ

  • CategoryId

Productsテーブルでは、CategoryIdは常に0に設定されていますが、Category_CategoryId列には製品が属するカテゴリのIDが含まれています。

カテゴリIDをCategoryId列に設定し、 Category_CategoryId列が生成されないようにするにはどうすればよいですか?

4

1 に答える 1

8

ORプロパティにForeignKey属性を適用します。プロパティの型をクラスに合わせて変更します(どちらも long または int にする必要があります)。CategoryCategoryIdCategoryIdCategoryIdCategory

public class Product
{
    public long ProductId { get; set; }
    public long CategoryId { get; set; }
    [ForeignKey("CategoryId")]
    public Category Category { get; set; }
}

public class Category
{
    public long CategoryId { get; set; }
    public List<Product> Products { get; set; }
}

また

public class Product
{
    public long ProductId { get; set; }
    [ForeignKey("Category")]
    public long CategoryId { get; set; }
    public Category Category { get; set; }
}

流暢なマッピングを介して同じことを行うことができます:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>()
        .HasRequired(p => p.Category)
        .WithMany(c => c.Products)
        .HasForeignKey(p => p.CategoryId)
        .WillCascadeOnDelete(false);

    base.OnModelCreating(modelBuilder);
}
于 2013-02-06T12:54:50.243 に答える