質問

間でマッピングを設定することについて簡単な質問があります [Order Details], [Products][Orders] Northwind Datbaseで。

[Order Details] 主キーがなく、このように見えます

[Order Details]
OrderId (int)
ProductId (int)
...

だから私の質問は、私がどのように私をセットアップできるのかということです OrderDetails このように機能するクラス?

public class OrderDetails
{
    public virtual Order Order { get; set; }
    public virtual Product Product { get; set; }
    public Decimal UnitPrice { get; set; }
    public int Quantity { get; set; }
    public Decimal Discount { get; set; }
}

私のデータコンテキストは次のようになります

public class NorthwindDb : DbContext
{
    public DbSet<Product> Products { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Order> Orders { get; set; }
    public DbSet<OrderDetails> OrderDetails { get; set; }
    public DbSet<Customer> Customers { get; set; }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new OrderDetailsConfiguration());
    }

    public static void InitializeBecauseOfThatWeirdMetaDataThingThatIDontUnderstandYet()
    {
        Database.SetInitializer<NorthwindDb>(null);
    }

}

と私 OrderDetailsConfiguration (私が何をしているのかわからないので空)

public class OrderDetailsConfiguration : EntityConfiguration<OrderDetails>
{
    public OrderDetailsConfiguration()
    {
        //HasKey(x => x.Order.OrderId);
        //HasKey(x => x.Product.ProductId);
    }
}

ヒントやアイデアは素晴らしいことです。

役に立ちましたか?

解決

最初に、あなたは明示的にPKとfksを内部に入れなければなりません 注文詳細 クラス:

public class OrderDetails 
{        
    public int OrderID { get; set; }
    public int ProductID { get; set; }

    public virtual Order Order { get; set; }
    public virtual Product Product { get; set; }

    public Decimal UnitPrice { get; set; }
    public int Quantity { get; set; }
    public Decimal Discount { get; set; }
}

次のコードを使用すると、PKSを指定できます OrderDetailSconFiguration クラス:
(で注意してください 北風 両方のデータベース OrderId製品番号 PKSです 注文詳細 テーブル)。

public class OrderDetailsConfiguration : EntityConfiguration<OrderDetails> 
{
    public OrderDetailsConfiguration() 
    {
        HasKey(od => new 
        {
            od.ProductID,
            od.OrderID
        });
    }
}

また、使用できます RecreatedatabaseifModelChanges クラスモデルを変更するたびにデータベースを再作成させる戦略:

Database.SetInitializer<NorthwindDb>(
        new RecreateDatabaseIfModelChanges<NorthwindDb>());

興味深い点は、これらの変更を加えたら、efがfksを自動的に推測するということです。 注文詳細 クラスと関係を作成します 注文製品 に基づいたOrderIDおよびProductIDのテーブル 最初にコードの規則:

最初にコードは、名前が付けられたプロパティを推測します <navigation property name><primary key property name> (すなわち製品製品)、 <principal class name><primary key property name> (すなわち、製品プロダクティッド)または <primary key property name> (つまり、ProductID)は、プライマリキーと同じデータ型を持つ、関係の外部キーを表します。複数の一致が見つかった場合、上記の順序で優先順位が与えられます。外部キーの検出は、ケースに敏感ではありません。

他のヒント

key]属性を持つキーフィールドをマークします。複合キーの場合、[列(順序= x)]を追加する必要があります。https://msdn.microsoft.com/en-us/data/jj591583.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top