1

私は商品を販売するシステムに取り組んでいます。このシステムには製品があり、製品タイプごとにサブクラスがあります。

public abstract class Product 
{
    public int ProductId { get; set; }
    public string naam { get; set; }
    public string barcode { get; set; }
}

public class Card :Product
{
    [Display(Name = "Cardnumber")]
    public int nummer { get; set; }
    public Kaliber kaliber { get; set; }
}

さらに、販売したすべての製品の履歴を、その時点で正しかったすべてのデータとともに保持したいと考えています。

 public class Transaction
{
    public int transactionId { get; set; }
    public Member member { get; set; }
    public virtual ICollection<Product> producten { get; set; }
    public double totaalprijs { get; set; }
    public DateTime tijdstip { get; set; }
    public string kantoorMedewerker { get; set; }
}

問題は、そのエンティティが Product to Transaction で FK を作成することです。それは私が欲しいものではありません。それぞれに個別のテーブルが必要です。Products テーブルと SoldProducts テーブル。私はすでに私のproductContextでこれを試しました:

public DbSet<Product> producten { get; set; }
public DbSet<Product> uitgifte_producten { get; set; }

EF では type ごとに複数のオブジェクト セットが許可されていないため、これは不可能です。これは些細なことのように思えますが、私には理解できません。1 つの Product と 1 つの Soldproduct の 2 つのクラスを作成し、両方が producttypes のサブクラスを持つことは、かなり醜いように思えます。私はそれを試しましたが、VS2012 は Product を SoldProduct に変換できないと文句を言います。

C#、.net 4.0、および EF でこれを行うには、何が良いと思われますか?

4

3 に答える 3

1

EF Code First を使用していると仮定します。Transactions テーブルに製品のコレクションがある場合、EF はこれを典型的な 1 対多の関係と見なします。

Product から必要なすべての詳細をコピーする TransactionDetail テーブルを追加します。

 public class TransactionDetail{
     public int TransactionId { get; set; }
     public int ProductId { get; set; }
     public string naam { get; set; }
     public string barcode { get; set; }
}

コメントに応じて更新:

コードファーストを使用していると仮定します。あなたのシナリオでは、上記の TransactionDetail クラスを基本クラスとして使用し、製品の種類に関して派生クラスをさらに持つことができます。製品ごとに必要なすべての詳細を取得することができ、データベースにはもう 1 つの追加テーブルしかありません。

于 2013-05-22T02:41:06.173 に答える