Конвертировать DBContext в ObjectContext для использования с GridView - PullRequest
29 голосов
/ 09 ноября 2011

У меня есть проект webforms, использующий EF codefirst для сохранения данных.Я хотел бы использовать GridView и EntityDataSource, чтобы сохранить запись CRUD.Возможно ли это?

Могу ли я преобразовать мой DBContext в ObjectContext, ожидаемый EntityDataSource?

Вот что я попробовал:

<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'.

Ответы [ 3 ]

72 голосов
/ 10 ноября 2011

Попробуйте это:

var context = new YourDbContext();
var adapter = (IObjectContextAdapter)context;
var objectContext = adapter.ObjectContext;
4 голосов
/ 15 февраля 2013

Попробуйте это ->

protected void OrdersDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e)  
{   
    var context = new YourContext();
    e.Context = ((IObjectContextAdapter)context).ObjectContext;
}
2 голосов
/ 18 сентября 2013

После 2 дней борьбы я нашел эту ссылку , которая мне очень помогла. Я работаю с VS 2012, и у меня была такая же проблема с DBContext.
Согласно ссылке, в VS2012 генератор кода по умолчанию был изменен, чтобы генерировать объекты POCO и DBContext, в отличие от объектов, производных от EntityObject и ObjectContext, которые были по умолчанию в VS2010.
В обозревателе решений в вашей модели сущностей необходимо удалить шаблоны tt и в конструкторе щелкните правой кнопкой мыши поверхность конструктора, а затем в свойствах измените стратегию генерации кода с None на Default, чтобы получить сущности на основе EntityObject и производный ObjectContext. контекст.

...