24

Verileri sürdürmek için EF codefirst kullanarak bir web formları projem var. Yazma CRUD'unu kaydetmek için GridView ve EntityDataSource kullanmak istiyorum. Bu mümkün mü?GridView ile kullanım için DBContext'i ObjectContext'e Dönüştürme

DBContext'imi EntityDataSource tarafından beklenen bir ObjectContext'e dönüştürebilir miyim?

İşte denedim ne:

türündeki nesne artığını açılamıyor 'SomeNamespace.Models.ShopDBContext' 'System.Data.Objects yazın:

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

Ancak bu istisna olsun. ObjectContext'.

+2

olası bir kopyası [EF Code First DbContext'i bir Asp.Net DataSource'a nasıl bağlanır?] (Http://stackoverflow.com/questions/6327937/how-to-bind-ef-code-first-dbcontext-to -an-asp-net-datasource) –

+0

Gerçekten de, bir yinelenen, teşekkürler (not: "DBContext ObjectContext GridView için bir arama bu bulacaksınız ama bir cevap ile soru bu değil) – Myster

cevap

64

bu deneyin:

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

tanrı bu satırlar için yerin her yerinde bakıyordu . Teşekkürler! – forhas

+2

Bu aptalca bir soru olabilir, ancak 'YourDbContext' 'IObjectContextAdapter' mi yoksa, neden bunu yayınlamak zorundasınız? 'YourDbContext' ObjectContext'ı başlatmamalı mı? – Eitan

+1

IObjectContextAdapter arabiriminin, DbContext Sınıfında özel bir şekilde uygulanan yalnızca bir özelliği (ObjectContext) olduğundan. Bu bağlantıyı kontrol edin http://stackoverflow.com/questions/792908/what-is-a-private-interface – marianosz

3

bu bir deneyin - mücadele 2 gün sonra>

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

, ben bana yardımcı bu link bir lot.I 2012 ve withVS çalışıyorum bulundu DBContext ile aynı sorun vardı.
Bağlantıya göre, VS2012'de varsayılan kod üreteci, VS2010'da varsayılan olan EntityObject ve ObjectContext'ten türetilen varlıkların aksine, POCO varlıkları ve DBContext oluşturmak için değiştirildi.
Çözüm modelinde, varlık modeliniz altında, tt şablonlarını kaldırmanız gerekir ve tasarımcıda, tasarımcı yüzeyine sağ tıklar ve daha sonra özellikler içinde EntityObject tabanlı varlıkları almak için kod oluşturma stratejisini Yoktan Varsayılan'a değiştirir ve ObjectContext türetilmiş bağlam.