13

私はEFで最初のプロジェクトを行っており、コードファーストモデルを使用することを計画しています。かなり古典的な「ルックアップテーブル」シナリオの処理に関するガイダンスを少し見つけようとしています。

私は、アドレスデータを永続化するというかなり標準的な状況を扱っています。だから、私は単純なアドレスDTOを持っています...

public class Address
    {
        public int Id { get; set; }
        public virtual string StreetAddress1 { get; set; }
        public virtual string StreetAddress2 { get; set; }
        public virtual string City { get; set; }
        public virtual string State { get; set; }
        public virtual string ZipCode { get; set; }
    }

州のプロパティに、標準の米国の2文字の州コードを保存したいと思います。検証の目的で、結果のアドレステーブルとかなり標準的な状態ルックアップテーブルの間に、標準の1対多の外部キー関係が必要です。そのテーブルには、おそらくID、2文字のコード、および完全な状態名を含む3番目の列が含まれます。

この状態ルックアップテーブルを使用して、ドロップダウンスタイルボックスなどにデータを入力し、状態を設定し、アドレスエンティティにファイルされた状態の検証としても機能することを期待します。かなり一般的なもの。それで、私はいくつかの簡単な(私は願っています)質問があります。

  1. EFにテーブルを作成させるためだけに、Stateエンティティを表すエンティティを作成する必要がありますか、それともDBCreation戦略にテーブル作成プロセスを含めてそこにシードするだけですか?
  2. 「ステートピッカー」を表示したい場所の「ビューモデル」として使用するために、そのエンティティを作成することは理にかなっていますか?
  3. 本当に2文字の状態コードをアドレスエンティティに格納したいだけですが、これは意味がありますか、それとも状態エンティティへのナビゲーションプロパティにしてから表示する方が意味がありますか?

ここで自分の主張を明確にするのに少し苦労したので、はっきりしない場合は、遠慮なく詳細を尋ねてください。

前もって感謝します。UIで適切に?

4

2 に答える 2

9
  1. 状態を独自のクラスとAddressのナビゲーションプロパティにします。
public class Address
{
    public int Id { get; set; }
    public virtual string StreetAddress1 { get; set; }
    public virtual string StreetAddress2 { get; set; }
    public virtual string City { get; set; }
    public virtual USState State { get; set; }
    public virtual string ZipCode { get; set; }
}

public class USState
{
    public int Id { get; set; }
    public string Code { get; set; }
    public string Text { get; set; }
}

コードを使用すると、最初にEFがテーブルを作成しますが、Seed()メソッドにデータを入力できます。

  1. ビューモデルを使用する必要はありませんが、編集フォームで状態を表示するために共有ビューを使用することは理にかなっています。MVCについては言及していませんが、それを使用する場合は、置くのと同じくらい簡単です。
[UIHint("StatePicker")]
public virtual USState State { get; set; }

POCOまたはビューモデルで-ビューが使用するものに応じて。次に、Views / Shared / EditorTemplatesで、部分ビューStatePicker.cshtmlを追加します。これは次のようになります。

@inherits System.Web.Mvc.WebViewPage<USState>
@Html.DropDownListFor(m => m, new SelectList((IEnumerable<USState>)ViewBag.USStatesAll,
    "Id",
    "Name",
    Model==null?1:Model.Id),
    "Choose--")

と組み合わせて

@Html.EditorFor(m => m.State)

あなたの見解では。

  1. ナビゲーションプロパティ。データベースはUSStateIDを外部キーとして保存しますが、アプリは必要に応じてaddr.State.Codeまたはaddr.State.Textを使用できます。それははるかに柔軟です。
于 2012-04-06T15:13:16.227 に答える
1
  1. はい、元のスクリプトを拡張する新しいDBCreationスクリプトを作成し、EntityFrameworkとは関係のない状態テーブルを作成できます。

  2. もし私があなたなら、私は州の実体を作ります。状態エンティティが作成されていない場合は、最終的にコードで作成する必要がありますが、このエンティティの入力が問題になるため、sqlを使用する必要があります(このデータをxmlに保存する方が、 sql)。

  3. テーブルをデータベースに保存し、エンティティを作成して直接使用する場合は、遅延読み込みや積極的な読み込み中に直接使用できるため、ナビゲーションプロパティにすることをお勧めします。

于 2012-04-06T14:59:38.380 に答える