0

0 または 1 個の CreditCard オブジェクトを持つことができる Order オブジェクトと、Order に属している必要がある CreditCard オブジェクトがあるように、2 つの POCO クラス間の正しい関係をコーディングしたことを誰かが確認できますか (いくつかのクラス プロパティは簡潔にするために削除されています)。

public class Order
{
    public int OrderId { get; set; }
    public string Username { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public decimal Total { get; set; }

    public CreditCard CreditCard { get; set; }
}

public class CreditCard
{
    public int CreditCardId { get; set; }
    public int OrderId { get; set; }
    public CardType Type { get; set; }
    public string Number { get; set; }

    public Order Order { get; set; }
}

私の OnModelCreating メソッドには、次のものがあります。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Order>().HasOptional(or => or.CreditCard).WithRequired(lu => lu.Order);
}

うまくいけば、上記のコードは、Order にはオプションの CreditCard がありますが、Credit Card には Order が必要であることを指定しています。

4

2 に答える 2

0

EF では、1:1 および 1:0..1 (さらには 0..1:0..1) の関係では、関連するすべてのエンティティ間で主キーを共有する必要があります。あなたCreditCardIdOrderId値は同じでなければなりません。

関係を正しく指定する構成が見られますが、のOrderIdプロパティCreditCartは冗長であり、問​​題を引き起こす可能性があります。では、サーバー生成ではないことCreditCardをマークする必要がある場合もあります。CreditCardId

于 2013-11-13T21:11:07.270 に答える
0

Entity Framework や NHibernate などの o/r マッパーを使用している場合は、これを 1 対多としてモデル化し、パブリック プロパティを使用してコレクションを 1 つのアイテムに制限します (実際には、それが可能かどうかはわかりません)。 EF)。基本的に、これを 1:n として扱います。ここで、n はビジネス ルールによって設定されます。私はこの解決策が好きではありませんが、私の経験ではそれをモデル化するための最良の方法であり、過去 4 年近くの間、より良い解決策を見つけていません

于 2013-11-13T21:11:23.487 に答える