0

私はエンティティ フレームワークと C# を初めて使用しますが、SQL は使用しません。[XRef_Codes] というルックアップ テーブルを参照する複数のフィールドを持つテーブル [Contact] があります。まず、asp.net Web フォームのすべてのドロップダウン リストを、ページの読み込み時にフィルター処理されたルックアップ テーブルにバインドします。次に、連絡先エンティティ モデルでルックアップ値 (整数とテキスト値) を公開できるようにしたいと考えています (以下を参照)。

[Contact] テーブルのフィールドのサンプルを次に 示します。 FirstName (vchar(50) LastName (vchar(50) xPrefix (int) xSuffix (int) xReferral (int) xStatus (int) xGender (int) xMaritalStatus (int) xAgeGroup) (整数)

[xRef_Codes] という名前の自己参照ルックアップ テーブルがあります。このテーブルには、連絡先テーブルで "x" というプレフィックスが付けられたすべてのフィールド (つまり、xPrefix、xSuffix) の選択値があります: [xRef_Codes] CodeID (int) CodeName (vchar50) OfCodeID (int) ) SortOrder (整数) SetAsDefault (ビット)

[1] asp.net フォームで、並べ替え/フィルター処理されたドロップダウンリストを作成したいと考えています。FROM xRef_Codes テーブル WHERE OfCodeID=## ORDER BY SetAsDefault, SortOrder. ページの読み込みでは、一度にすべてのドロップダウン リストをバインドします。

[2] 関連する XRef_Codes "CodeName" 値を連絡先オブジェクト/エンティティの一部として関連付けたい。そのため、contact.prefix.CodeName ="Mr." が表示されました。および contact.suffix.CodeName = "Sr." contact.gender.CodeName ="Male" など

これに対する最善のアプローチは何ですか?エンティティ フレームワーク デザイナーでこれらすべてのフィールドを関連付ける必要があるかどうかを理解するのに役立つものはありますか?

4

1 に答える 1

1

私は物事に慣れていないので、旅の成果を共有すると思いました. 私の解決策は、global.asax ファイルと Session_Start() オブジェクトを利用することでした。

最初に、xRefCodesRepository というドロップダウン リスト コードのクラスを作成しました。最初のルーチンでは、次のように値をセッション変数にロードします。

 public void xref_LoadIntoSessionCache()
         {
             MyDatabaseEntities ctb = new MyDatabaseEntities();
             List<XRef_Codes> allCodes = (from x in ctb.XRef_Codes
                        orderby x.OfCodeID, x.SetAsDefault descending, x.SortOrder
                        where (x.IsImplemented == true)
                        select x).ToList();
             HttpContext.Current.Session["ListOfCodes"] = allCodes;
         }

次に、クラス ルーチンを追加して、parentID 値でコードをフェッチします。私の場合、CodeID、CodeName、OfCodeID などのフィールドを持つ自己参照テーブルがあります。次のようにコードをフェッチします。

public List<XRef_Codes> xref_GetChildCodes(Int32 OfCodeId)
        {
            //List<XRef_Codes> allCodes = (List<XRef_Codes>)Session["ListOfCodes"];
            List<XRef_Codes> xCodes = xref_GetAllCodes();
            xCodes = (from x in xCodes
                      orderby x.OfCodeID, x.SetAsDefault descending, x.SortOrder
                      where x.OfCodeID == OfCodeId
                      select x).ToList();
            return (xCodes);
        }

次に、global.asax ファイルを編集します。クラス フォルダを参照します。つまり、MyDatabase.CLASSNAME を使用します。 次に、コードをセッション変数にロードするクラス ルーチンを呼び出すルーチンを global.asax に追加します。

void Session_Start(object sender, EventArgs e)
        {
            // Code that runs when a new session is started
            xRefCodesRepository x = new xRefCodesRepository();            
            x.xref_LoadIntoSessionCache();
        }

最後に、私のコードでは、セッション キャッシュを参照してさまざまなオブジェクトを設定します。

于 2013-01-19T05:54:36.710 に答える