将DBContext转换为ObjectContext以与GridView一起使用

时间:2011-11-09 03:11:23

标签: gridview entity-framework-4.1 ef-code-first entitydatasource

我有一个使用EF codefirst的webforms项目来保存数据。 我想使用GridView和EntityDataSource,以节省写入CRUD。 这可能吗?

我可以将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”。

3 个答案:

答案 0 :(得分:72)

试试这个:

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

答案 1 :(得分:4)

试试这个 - &gt;

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

答案 2 :(得分:2)

经过2天的挣扎,我发现这个link给了我很多帮助。我正在使用VS 2012,我和DBContext有同样的问题。
根据链接,在VS2012中,默认代码生成器被更改为生成POCO实体和DBContext,而不是从VS2010中默认的EntityObject和ObjectContext派生的实体。
在解决方案资源管理器中,在您的实体模型下,您需要删除tt模板,并在设计器中右键单击设计器表面,然后在属性中将代码生成策略从None更改为Default以获取基于EntityObject的实体和ObjectContext派生上下文。