2017-07-17 3 views
0

経由EFテーブルに結合したときにこんにちは、私は私がBindingSource1にアクセスしたときは、SQLオーバーライド

sql = "select a.*, b.col3 from table1 a inner join table2 b on a.col2 = b.col1"; 
context.Table1.SqlQuery(sql).ToList(); 
BindingSource1.DataSource = context.Table1.Local.ToBindingList(); 

は、しかし、それはTABLE1から列のみを持っているとしてバインドなっているのBindingSourceを持ってバインディングソースに追加の列を追加します。 table2からcol3を追加する簡単な方法があるかどうか疑問に思うので、そのフォームに多くのロジックを書き直す必要はありません。私はlinqでefに逃げようとしましたが、SQLオーバーライドを使用していたときと同じ結果セットが得られません(実際のクエリは非常に複雑です)。私が何かをする必要があるたびにクエリのオーバーライドを導入したくないこの。

答えて

0

あなたのBindingSource1がどのように使われているかわからないので、私はEFの部分だけにコメントすることができます。 Table1の部品しか表示されないのは、そのテーブルからcontext.Table1.SqlQuery()を選択したためです。これはあなたのクエリをTable1クラスと照合するだけで、col3はその一部ではありません。

実生活のクエリが複雑な場合は、データベースビューを作成してEFまでフックし、代わりにそのビューから選択する方がよい場合があります。または、非エンティティの選択を行い、それをクラスにマップすることができます。context.Database.SqlQuery<Class>(sql)

+0

Table1に子ICollection がある場合、どのように新しいクラスに入力しますか? – AlexanderM

+0

このケースではうまくいくとは思っていませんし、少なくとも私が知っているものではありません。これは、EFマッピングがあなたに与えてくれるものの一つであり、本当に強力ですが、このバインディングでは表3のものが必要ですか?もしあなたがそうするなら、私が上で述べたことの代わりにできることは、Table3のようにTable2へのマッピングを行い、Table2オブジェクトからcol3を得ることです。これを行う場合は、EFが照会するためのIncludeメソッドを使用して、データベースに多くの呼び出しを行わないようにすることをお勧めします。 – SpaceOgre

+0

Table2からデータを取得するためにTable1にバインドされているBindingSourceに列をバインドする方法、またはそのデータをGridviewにどのように取得するのですか?そのバインディングソースは実際にはグリッドビューをバインドしており、私は子テーブルからデータを戻す必要があります。これはwinformsアプリケーションであり、edmx EFを使用しています。私は過去5年間edmxで働いていませんでした(2013年以降はEFを使用していたのはコードが最初です)。winformsは決してありませんでした。 – AlexanderM

関連する問題