24

Ho un progetto di webform utilizzando EF codefirst per mantenere i dati. Mi piacerebbe utilizzare un GridView e EntityDataSource, al fine di salvare la scrittura CRUD. È possibile?Converti DBContext in ObjectContext per l'utilizzo con GridView

Posso convertire il mio DBContext in un ObjectContext che è previsto da EntityDataSource?

Ecco cosa ho provato:

<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" /> 

Tuttavia ottengo questa eccezione:

Impossibile eseguire il cast oggetto di tipo 'SomeNamespace.Models.ShopDBContext' digitare 'System.Data.Objects. ObjectContext'.

+2

possibile duplicato di [Come associare EF Code First DbContext a un AspSource DataSource?] (Http://stackoverflow.com/questions/6327937/how-to-bind-ef-code-first-dbcontext-to -an-asp-net-datasource) –

+0

In effetti è un duplicato, grazie (nota: una ricerca per "DBContext ObjectContext GridView" troverà questa ma non la domanda con una risposta) – Myster

risposta

64

Prova questo:

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

dio è stato guardando dappertutto per quelle linee . Grazie! – forhas

+2

Questa potrebbe essere una domanda stupida, ma se "YourDbContext" eredita "IObjectContextAdapter", perché devi lanciarlo? Non dovrebbe 'YourDbContext' istanziare ObjectContext? – Eitan

+1

Poiché l'interfaccia IObjectContextAdapter ha solo una proprietà (ObjectContext) implementata in modo privato nella classe DbContext. Controlla questo link http://stackoverflow.com/questions/792908/what-is-a-private-interface – marianosz

3

provare questo ->

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

Dopo 2 giorni di lotta, ho trovato questo link che mi ha aiutato un lot.I sto lavorando withVS 2012 e Ho avuto lo stesso problema con DBContext.
In base al collegamento, in VS2012 il generatore di codice predefinito è stato modificato per generare entità POCO e DBContext rispetto alle entità derivate da EntityObject e ObjectContext che era l'impostazione predefinita in VS2010.
In solution explorer, sotto il modello dell'entità, è necessario rimuovere i modelli tt e, nella finestra di progettazione, fare clic con il pulsante destro sulla superficie del designer e quindi nelle proprietà modificare la strategia di generazione del codice da Nessuno a Predefinito per ottenere entità basate su EntityObject e Contesto derivato ObjectContext.

Problemi correlati