2017-01-04 9 views
0

エンティティ間の0..1の関係に関連してMVC/EFで誰かが私のために何かをクリアできることを望んでいました。MVC/EF 0..1の関係を扱う最善の方法

私の[仮説]データベースには、色のテーブルと果物のテーブルがあります。私はまた、

ID Name 
1  Red 
2  Green 
3  Yellow 

フルーツ

ID Name 
1  Banana 
2  Strawberry 

検索

ColourId FruitId 
1   2 
3   1 

色を次のように色や果物間の関係を管理し、ルックアップテーブルは、私が表示したいとしましょうきこの情報はMVCビューを使用してテーブルに格納され、次のように表示されます。

Colour Fruit 
Red Strawberry 
Green NULL 
Yellow Banana 

私はMVCにおけるモデルとして上記を代表して、モデルの備えビューモデルを作成することができます:私はここから行くでしょう

public class FruitViewModel 
{ 
    public List<Colour> colours {get;set;} 
    public List<Fruit> fruits {get;set} 
} 

を?フルーツカラーの3番目のモデルを作成してビューモデルに追加しますか?これにはNULL果実が含まれますか?

+2

は 'Colour'は、単にタイプ'一覧 'の' Fruits'性質を持っていませんか? (与えられた色の果物が複数あると仮定しています)次に、ビューモデルは必要ないでしょう。ビューモデルは 'List 'であり、テーブルをレンダリングすることを繰り返します。 – David

+0

レッドはイチゴと他のフルーツはできません。 – Jasen

+0

この例では、yes;) – SEarle1986

答えて

1

相互参照(ルックアップ)テーブルのモデルを作成する必要はありません。

これらはあなたがあなたのモデルに必要なものすべてです:

public class Fruit 
{ 
    public int Id { get; set; } 
    public int ColorId { get; set; } 
    public Color Color { get; set; } 
} 

public class Color 
{ 
    public int Id { get; set; } 
    public int? FruitId { get; set; } 
    public Fruit Fruit { get; set; } 
} 

その後、あなたのマッピングが(FluentApi対データ属性)、あなただけが関係を設定行う方法によって異なります。あなたのフルーツの設定で例えば

HasRequired(f => f.Color) 
    .WithOptional(c => c.Fruit) 
    .Map(f => 
     { 
      f.ToTable("Lookup"); 
      f.MapLeftKey("ColorId"); 
      f.MapRightKey("FruitId"); 
     }); 
+0

これは、実際の問題がここで提供されている例ほど単純ではないという前提で行われました。それが簡単なのであれば、 'Color'のコレクションははるかに理にかなっています。 – krillgar

+0

助けてくれてありがとうございました。私は仕事に就くことができません。 https://codeshare.io/alK9j5 で実装しましたが、エラー "次のような種類の関連付けの主な終点を特定できませんでした。 'FruitTest .Models.Fruit 'と' FruitTest.Models.Colour '。この関連付けの主な終点は、流暢なAPIまたはデータアノテーションのどちらかの関係を使用して明示的に設定する必要があります。コントローラ内。 – SEarle1986

+0

それは私の答えの最後の部分についてです。属性を使ってそれを行う別の方法もあります。 – krillgar

関連する問題