2010-12-07 1 views
0

これは可能ですか?enity-frameworkテーブル/コレクションをパラメータとして関数に渡すことができますか(asp.net/C#)

using (Entities db = new Entities()) 
{ 
    LoadDropDownList(ddlFirst, db.MyTable , (bool)(myMember.Id == 0), (int)myMember.RevenueRangeID); 
    LoadDropDownList(ddlSecond, db.OtherTable , (bool)(myMember.Id == 0), (int)myMember.OtherID); 

} 

私は2番目のパラメータの型がどうあるべきかでつまずいています - 私は基本的に「MyTableという」からのデータでDropDownListコントロールをロードする汎用ルーチンにエンティティフレームワーク「テーブル」を渡すためにしようとしていますカスタム論理/フィルタリングを使用してテーブルを作成します。

私は6つの異なるドロップダウンリスト/テーブルコンボで同じことをやっています。これを達成するために汎用関数を使いたかったのです。

答えて

1

(あなたがCodeFirstを使用している場合、またはDbSet)あなたのテーブルの基になる型がObjectSet次のとおりです。

public void LoadDropDownList<T>(DropDownList dropDown, ObjectSet<T> table, 
    bool isNew, int otherId) 
{ 
    // Do something 
} 
2

は、ここで私はどうなるのかです:

using(Entities db = new Entities()) 
{ 
    LoadDropDownList(ddlReferralType, db.TheTable.ToList(), (bool)(myMember.Id ==0), (int)myMember.RevenueRangeID); 
} 

これは、列挙されるように、テーブルを強制的にList<TMyTableEntity>に変換されます。テーブルを直接渡す問題は、Entity Frameworkがdeffered実行を使用していることです。つまり、の後にテーブルがクエリされないことを意味します。 ObjectContext(Entities db)が既に破棄されています。

Typedb.TheTableは、EFコード生成の設定方法によって異なります。しかし、おそらくObjectSet<T>またはObjectQuery<T>のいずれかです。

関連する問題