【问题标题】:Convert DBContext to ObjectContext for use with GridView将 DBContext 转换为 ObjectContext 以便与 GridView 一起使用
【发布时间】:2011-12-24 23:38:18
【问题描述】:

我有一个使用 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”类型。

【问题讨论】:

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


【解决方案1】:

试试这个:

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

【讨论】:

  • 上帝一直在到处寻找这些线条。谢谢!
  • 这可能是一个愚蠢的问题,但如果 'YourDbContext' 继承了 'IObjectContextAdapter',你为什么要强制转换它? 'YourDbContext' 不应该实例化 ObjectContext 吗?
  • 因为 IObjectContextAdapter 接口只有一个属性(ObjectContext),它是在 DbContext 类上以私有方式实现的。检查此链接stackoverflow.com/questions/792908/what-is-a-private-interface
【解决方案2】:

试试这个 ->

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多