24

J'ai un projet webforms utilisant le code EF d'abord pour conserver les données. Je voudrais utiliser un GridView et EntityDataSource, afin de sauver l'écriture CRUD. Est-ce possible? Puis-je convertir mon DBContext en ObjectContext attendu par EntityDataSource?Convertir DBContext en ObjectContext pour une utilisation avec GridView

Voici ce que j'ai essayé:

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

Cependant je reçois cette exception:

Impossible de jeter l'objet de type 'SomeNamespace.Models.ShopDBContext' taper « System.Data.Objects. ObjectContext '.

+2

duplication possible de [Comment lier le premier code d'environnement DbContext à une source de données Asp.Net?] (Http://stackoverflow.com/questions/6327937/how-to-bind-ef-code-first-dbcontext-to -an-asp-net-datasource) –

+0

En effet, il est un doublon, merci (note: une recherche de "DBContext ObjectContext GridView" va trouver cela mais pas la question avec une réponse) – Myster

Répondre

64

Essayez ceci:

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

dieu cherché partout dans ces lignes . Merci! – forhas

+2

Cela peut être une question stupide, mais si 'YourDbContext' hérite de 'IObjectContextAdapter', pourquoi devez-vous le lancer? 'YourDbContext' ne devrait-il pas instancier ObjectContext? – Eitan

+1

Parce que l'interface IObjectContextAdapter a une seule propriété (ObjectContext) qui est implémentée de manière privée sur la classe DbContext. Consultez ce lien http://stackoverflow.com/questions/792908/what-is-a-private-interface – marianosz

3

Essayez celui ->

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

Après 2 jours de lutte, j'ai trouvé ce link qui m'a aidé lot.I je travaille withVS 2012 et J'ai eu le même problème avec DBContext. Selon le lien, dans VS2012 le générateur de code par défaut a été modifié pour générer des entités POCO et DBContext par opposition aux entités dérivées de EntityObject et ObjectContext qui était par défaut dans VS2010.
Dans l'explorateur de solution, sous votre modèle d'entité, vous devez supprimer des modèles tt et, dans le concepteur, cliquer avec le bouton droit sur la surface du concepteur puis, dans les propriétés, modifier la stratégie de génération de code Contexte dérivé ObjectContext.

Questions connexes