2012-02-23 20 views
2

良い一日のみんなを使用して複雑なモデル、私はPOCOクラスで作成しようとしている、と私は非常に多くの異なるアプローチを試してみましたが、訪問した、非常に具体的なデータモデルを持っているEntity Frameworkの - コードファースト

非常に多くのウェブサイトが、私の具体例をカバーするものはありません。

私はこれをそこに投げ捨てて、誰かが私を助けることを願っています。

私には製品があり、製品には成分があります。しかし、私たちのビジネスでは、これらの製品は、それぞれ異なる原料を使用して、それぞれ異なるベンダーから供給される可能性があります。

だから私は私の基底クラスを持っている:

public class Product 
{ 
    public int ProductID { get; set; } 
    public string ProductNumber { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<Supplier> Suppliers { get; set; } 
} 

public class Vendor 
{ 
    public int VendorID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Supplier> Suppliers { get; set; } 
} 

public class Ingredient 
{ 
    public int IngredientID { get; set; }   
    public string Name { get; set; } 
} 

public class Supplier 
{ 
    public int SupplierID { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
    public virtual ICollection<Vendor> Vendors { get; set; } 
} 

あなたが見ることができるように、私の成分が特定のベンダーから来るので、私は、限り私のモデルが参加するエンティティを必要としていることを実現するように得ています製品については、サプライヤと呼ばれる参加エンティティが必要です(私は思っています)。

これは私が立ち往生している場所です...私の製品は、1社以上のベンダーから提供されます。製品ごとに各ベンダーは、その製品の成分のリストを持っています

私は参加エンティティが必要かどうかは、私も過去を過ぎることはできません。私はこの(または似たような)のようなデータ構造をナビゲートすることができれば素晴らしいだろう何

されました:またしても

articles[1].Vendors[3].Ingredients; 

、私はこれが可能であるかどうかを知るためにEntity Frameworkのについて十分に知りません。

私がやっているやり方は、今は...間違っていると感じます。私がやりたいことをする正しい方法は何ですか?私は結合表が必要ですか、何らかの形で製品のベンダーのための材料をナビゲートすることができますか?おそらくモデルビルダーを使用して製品 - >ベンダー - >成分リンクが必要になりますか?

ご協力いただければ幸いです!

編集: また、私はEntity Frameworkの関係のアイデアについて十分に理解していないと思います。

したがって、1つの製品に複数のベンダーが存在する可能性があります。これは1対多の関係です。しかし、ベンダーは多くの製品を持つことができます。これは実際には多対多ですか?

私はSQL Expressサーバーで何をしたいのかを明確にモデル化できますが、本当にEntity Frameworkを使いたいと思います。私はモデリング要件をよりよく理解する必要があります。

+0

'Product'、' Supplier'と 'Ingredient'の間に三項関係があるようです。それが正しいか? – Eranga

+0

私は3者関係を検索しなければならなかった...しかし私はそう信じています。 'Product'は常に1対多の' Suppliers'(ベンダー)を持ち、 'Supplier'はその製品に1対多の'原料 'を持ちます。また、私は、むしろ成分セットを運び、特定の製品のサプライヤーに成分セットを関連付けるべきかどうかも疑問に思っています。 – Tiny

答えて

3

EFの問題ではありません。それは一般的なエンティティ関係タスクです。単にモデルを改善しなければなりません。

public class ProductDefinition 
{ 
    public int ProductID { get; set; } 
    public string ProductNumber { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<ProductInstance> Instances { get; set; } 
} 


public class ProductInstance 
{ 
    public int ProductInstanceID { get; set; } 
    public virtual Supplier Supplier { get; set; } 
    public virtual ProductDefinition Definition { get; set; } 
    public vritual ICollection<Ingredient> Ingredients { get; set; } 
} 

ProductInstanceは、お使いのシステムでは、あなたがProductDefinition代わりの元Productで動作します、ProductDefinition:あなたは、たとえば2つのエンティティへProductを分割することができます。この定義は同じ製品のグループのようなものであり、異なる原料を使用して異なるサプライヤーによって提供される製品のすべての可能な製造を指しています。

私はあなたの文脈を知らないが、異なる成分を持つ製品を「同じ」と数えるのは奇妙に思える。

+0

でこの関係をモデル化する方法がわかりません。できるだけ早くフィードバックを与えます。 あなたの最後のコメントに対する回答: 製品にはバーコードが1つありますが、地域によっては販売されています。各地域では、基本的に私たちの代わりにその製品を作る別のサプライヤを抱えています。ここでは、異なるサプライヤーがわずかに異なる成分を使用しています。彼らはあまり違いはありませんが、彼らは異なっており、私たちはそれを記録する必要があります。 – Tiny

+0

さて、定義はうまくいくように見えますが、レコードを製品インスタンスに追加するにはどうすればいいですか?ここで私は今何をしています: 'var productInstance = new List { 新しいProductInstance {context.Products.Find(1)、Vendor = context.Vendors.Find(1)、Ingredients = new List { 新しい成分{NAME = "水"}、 新成分{NAME = "シュガー"} } } ' これは動作していないようですので、私は、私はそれをすべて理解していません。 .. – Tiny

+0

何がうまくいかない?プライマーの問題は、EFの基本をどのように使用するかを理解していないようです。おそらく、アプリケーションを作成する前に、いくつかのチュートリアルを実行する必要があります。 –

0

最初にデータベースの設計を行う代わりに、コードを最初に使用するのはなぜですか?たぶんこれは少し楽になるでしょう。さらに、私は私の理解のためにVendorIngredient、またはProductIngredient

との関係を参照してくださいカント: それはベンダーが他の成分を使用している場合、新製品ですか?

+0

ほとんどのコードを使用しています。私はコードファーストを学びたいからです。これはまったく新しいアプリケーションです。 ご理解のとおり:いいえ、ベンダーが他の原料を使用する場合は新製品ではありません。 これは1つの製品で、さまざまなベンダーによって提供されています。各ベンダーはわずかに異なる成分を使用します。 – Tiny

+0

最大の問題は、関係を見ることができるということです。Entity Framework – Tiny

関連する問題