24

我有一個使用EF codefirst持久數據的webforms項目。 我想使用GridView和EntityDataSource,以節省寫入CRUD。 這可能嗎?將DBContext轉換爲ObjectContext以與GridView一起使用

我可以將我的DBContext轉換爲EntityDataSource預期的ObjectContext嗎?

這裏是我的嘗試:

<asp:EntityDataSource ID="OrdersDataSource" runat="server" ContextTypeName="SomeNamespace.Models.ShopDBContext" 
    EnableFlattening="False" EntitySetName="Orders" EntityTypeFilter="Order" EnableDelete="False" 
    EnableUpdate="False" Include="OrderLines" OrderBy="it.Id"> 
</asp:EntityDataSource> 

<asp:GridView ID="OrdersGridView" runat="server" AllowPaging="True" AllowSorting="True" 
    AutoGenerateColumns="True" DataKeyNames="Id" DataSourceID="OrdersDataSource" /> 

不過,我得到這個異常:

無法投類型的對象SomeNamespace.Models.ShopDBContext爲鍵入「System.Data.Objects。 ObjectContext的」。

+2

[如何將EF Code First DbContext綁定到Asp.Net數據源?](http://stackoverflow.com/questions/6327937/how-to-bind-ef-code-first-dbcontext-to -an-asp-net-datasource) –

+0

確實它是一個重複的,謝謝(注意:搜索「DBContext ObjectContext GridView」會發現這個問題,但不是一個答案的問題) – Myster

回答

64

試試這個:

var context = new YourDbContext(); 
var adapter = (IObjectContextAdapter)context; 
var objectContext = adapter.ObjectContext; 
+1

神一直在尋找那些線的地方。謝謝! – forhas

+2

這可能是一個愚蠢的問題,但如果'YourDbContext'繼承'IObjectContextAdapter',爲什麼你必須施放它?不應該'YourDbContext'實例化ObjectContext? – Eitan

+1

因爲IObjectContextAdapter接口只有一個屬性(ObjectContext),它在DbContext類上以私有方式實現。 檢查此鏈接http://stackoverflow.com/questions/792908/what-is-a-private-interface – marianosz

3

嘗試這一個 - >

protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e) 
{ 
    var context = new YourContext(); 
    e.Context = ((IObjectContextAdapter)context).ObjectContext; 
} 
1

掙扎後2天,我發現這個link這對我的幫助lot.I我的工作withVS 2012我有與DBContext相同的問題。
根據鏈接,在VS2012中,默認代碼生成器已更改爲生成POCO實體和DBContext,而不是從VS2010中默認的EntityObject和ObjectContext派生的實體。
在解決方案資源管理器中,在您的實體模型下,您需要刪除tt模板,然後在設計器中右鍵單擊設計器表面,然後在屬性中將代碼生成策略從None更改爲Default以獲取基於EntityObject的實體, ObjectContext派生的上下文。

相關問題