1

Generic Repository パターンを使用して Entity Framework Code First をセットアップしました。

ここに私のモデルがあります:

public interface IEntity {
    int Key { get; set; }
}

public class Product : IEntity {
    public int Key {
        get {
            return ID;
        }
        set {
            ID = value;
        }
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public IEnumerable<Category> Category { get; set; }

}

public class Category : IEntity {
    public int Key {
        get {
            return ID;
        }
        set {
            ID = value;
        }
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public int ParentID { get; set; }

}

これが私の汎用リポジトリにフックするコンテキストです。

public class EntitiesContext : DbContext, IDbContext {

    public DbSet<Product> Products { get; set; }
    public new IDbSet<T> Set<T>() where T : class {
        return base.Set<T>();
    }
}

ご覧のとおり、Product にはカテゴリの IEnumerable があります。これに一致するデータベースを作成するとしたら、次のようになります。

商品 - ID - 名前 - など

カテゴリ - ID - 名前 - など

ProductCategories - ProductID - CategoryID

データベースが作成されたときに結合テーブルがないのはなぜですか?

ここに画像の説明を入力

4

1 に答える 1

1

コレクションを として定義しているためだと確信していますIEnumerable<T>ICollection<T>Entity Framework が関係を作るには、 少なくとも が必要だと思います。This SO postはそのほとんどをカバーしています。

したがって、これを変更します。

public IEnumerable<Category> Category { get; set; }

これに:

public ICollection<Category> Category { get; set; }

さらに、コレクションを遅延ロードする場合は、仮想化も行います。

public virtual ICollection<Category> Category { get; set; }
于 2013-03-08T09:15:11.880 に答える