How to bind EF Code First DbContext to an Asp.Net DataSource?
Asked Answered
I

1

7

I've created the following Context to be used with Entity Framework Code First:

public class Context : DbContext
    {
        public DbSet<Animal> Animals { get; set; }
    }

Now I would like to use this Context in an Asp.Net application to perform CRUD operations using a GridView. I need to create a DataSource to do the data binding. How would I go about?

The ASP part would look like this:

<asp:GridView runat="server" DataSourceID="animalDataSource" DataKeyNames="AnimalID" AutoGenerateColumns="false">   
    <Columns>
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:CommandField ShowCancelButton="true" ShowEditButton="true" ShowDeleteButton="true" />
    </Columns>
</asp:GridView>
Inartificial answered 13/6, 2011 at 8:0 Comment(2)
Related: #6341883Inartificial
Great Q&A thanks, I retaged: -crud +objectcontext in order to try help searching. Because I didn't find this by searching for DBContext ObjectContext GridView. the retagging didn't help tho :-\Medovich
W
11

You can use EntityDataSource as source for your GridView and implement handler for ContextCreating event:

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

Then you just need to configure the data source in the page. EntitySetName should be hopefully same as your DbSet property name exposed on the context.

Other way is using ObjectDataSource which will make a bridge between GridView and DbSet<Animal> but this can be more complex especially if you want bi-didrectional data binding.

Worthen answered 13/6, 2011 at 10:31 Comment(3)
Nice, it does the job. The only problem is that the update will throw the exception: "Update is disabled for this control."Inartificial
Hahaha... but that was easy to fix. Thanks for the answer man!!Inartificial
Add this to your EntityDataSource in your aspx: EnableInsert="True" EnableUpdate="True"Botelho

© 2022 - 2024 — McMap. All rights reserved.