0

現在、EF Code First MVC プロジェクト (簡潔にするために編集) に次のモデルがあります。

public class Car
{
    public int Id { get; set; }
    public string Descrip { get; set; }

    // Navigation Property.
    public virtual CarColour CarColour { get; set; }
    ... + numerous other navigation properties.
}

public class CarColour
{
    public int Id { get; set; }
    public string ColourName { get; set; }
}

DB の CarColour テーブルには多くの行が含まれています。

私のプロジェクトでは、これらの種類のテーブルが約 10 個ありますが、これらは基本的にルックアップ テーブルです。

10 個のルックアップ テーブル (およびコード内の 10 個の対応する「ハード」型) を用意するのではなく、(この例では) Car に固有のルックアップ テーブルをラインに沿って大量に用意する代わりに、より再利用可能なアプローチを実装することを任されました。いくつかのテーブルがあり、そのうちの 1 つはアイテムの種類 (色、燃料の種類など) を保持し、もう 1 つは各種類のさまざまな値を含みます。私たちのモデルは、他の多くのプロジェクトで再利用できるようになるという考えです。その中には、何百もの異なる属性を持つ可能性のあるプロジェクトもあるため、コードで新しいクラス/タイプを作成して生成する必要はありません。それぞれの新しいルックアップ テーブル。

この種のアプローチの c# 実装を理解するのが難しいので、誰かがコードでこれを実現する方法、より具体的には、上記のモデルをどのように変更する必要があるか、および追加のクラスを教えてくれることを願っています。これを達成するために必要ですか?

4

2 に答える 2

0

基本エンティティは INotifyPropertyChanged を実装し、それを汎用にする必要があります。

public virtual CarColour CarColour {
 Get { return this.carColour; }
 Set {
     this.Carcolour; = value
     OnPropertyChanged("CarColour");
     }
}

詳細については、パターンとプラクティス: CodePlex の Prism を参照してください。 http://compositewpf.codeplex.com/wikipage?title=モデル%20View%20ViewModel%20(MVVM)

こんにちはバッサム

于 2013-08-09T13:02:11.263 に答える
0

これは必ずしも EF に固有のものではありませんが、私はこの道を進んできましたが、あまり楽しめませんでした。

「一般的な」情報を表すために単一のテーブルを使用したかったのですが、それはスマートだと思っていましたが、すぐに限界があることがわかりました。そのうちの 1 つは、「この車の色を取得する」以上のことを実行する場合に、このデータを抽出するためのクエリを作成するときに導入する必要がある複雑さです。

あなたのデータが単純なキー/値であり、値の型が常に同じになる場合は、それを選択してください。これをオブジェクトの単なる「メタデータ」にする価値さえあるかもしれません。

public class Car
{
    public int Id { get; set; }
    public string Descrip { get; set; }
    public MetaData CarColours { get; set; }
}

public MetaData : Dictionary<int, string>
{
    public MetaData(int group){}
}

仮想テーブル:

TableMetaData(int metaGroup, int metaId, string metaValue)

さまざまなタイプを値として保存することを望んでいて、このデータで結合を実行する必要がある場合は、それを避けて、もう少し具体的にしてください。

于 2013-08-09T14:47:58.773 に答える