Convierta DBContext a ObjectContext para usar con GridView
entity-framework-4.1 ef-code-first (3)
Después de 2 días de dificultades, encontré este link que me ayudó mucho. Estoy trabajando con VS 2012 y tuve el mismo problema con DBContext.
De acuerdo con el enlace, en VS2012 el generador de código predeterminado se cambió para generar entidades POCO y DBContext en oposición a las entidades derivadas de EntityObject y ObjectContext, que por defecto en VS2010.
En el explorador de soluciones, en su modelo de entidad, necesita eliminar plantillas tt y, en el diseñador, hacer clic derecho en la superficie del diseñador y luego en las propiedades cambiar la estrategia de generación de código de Ninguno a Predeterminado para obtener entidades basadas en EntityObject y ObjectContext derivado contexto.
Tengo un proyecto de formularios web que usa EF codefirst para conservar los datos. Me gustaría utilizar GridView y EntityDataSource para guardar la escritura de CRUD. es posible?
¿Puedo convertir mi DBContext a ObjectContext que espera EntityDataSource?
Esto es lo que intenté:
<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" />
Sin embargo, recibo esta excepción:
No se puede convertir el objeto de tipo ''SomeNamespace.Models.ShopDBContext'' para escribir ''System.Data.Objects.ObjectContext''.
Prueba este ->
protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)
{
var context = new YourContext();
e.Context = ((IObjectContextAdapter)context).ObjectContext;
}
Prueba esto:
var context = new YourDbContext();
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;