2017-07-17 53 views
0

嗨結合EF表時添加額外的列到綁定源我然而,當我訪問BindingSource1它已經從表1只列,這是獲得綁定爲通過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(); 

一個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映射給你的東西之一,它可以非常強大,但是你需要在這個綁定中使用Table3中的任何東西嗎?如果你這樣做,那麼你可以做的一件事,而不是我上面說的是做Table2到Table1的映射,就像你對Table3的映射一樣,只是從Table2對象獲得col3。如果你這樣做,那麼我會建議你使用EF查詢的包含方法,這樣你就不會有太多的數據庫調用。 – SpaceOgre

+0

如何將列綁定到綁定到Table1的BindingSource中以獲取Table2中的數據,或者如何將該數據獲取到GridView中?該綁定源實際上綁定了gridview,我需要從子表中取回一些數據。這是一個winforms應用程序並使用edmx EF。我過去5年沒有使用過edmx(如果我在2013年之後使用EF,它是代碼優先的),並且從不使用winforms,所以如果問題是基本的,那麼真的很抱歉。 – AlexanderM