2011-05-21 13 views
6

ile ilgili yardıma ihtiyacınız var. Asp.net web sitesinde Contoso University eğitimini takip ediyordum ve her şey iyi çalışıyor. Bir sonraki adım, bazı şeyleri kendi web sitemde çoğaltmaktı.Yeni Soru: ContextTypeName

<asp:EntityDataSource ID="ProductTypeEntityDataSource" runat="server" 
     ConnectionString="name=MyWebsite2011Entities" 
     DefaultContainerName="MyWebsite2011Entities" EnableFlattening="False" 
     EntitySetName="product_type"> 

Ve öğretici göre bir ContextTypeName ile ConnectionString ve DefaultContainerName yerine iyi bir fikirdir: Ben çalışan bir EntityDataSource ekledik.

"EntityDataSource kontrolü için biçimlendirme olarak, ConnectionString ve DefaultContainerName niteliklerini kaldırın ve ContextTypeName = bunların yerine" ContosoUniversity.DAL.SchoolEntities" özniteliği. Bu size bir EntityDataSource denetimi oluşturmak her zaman yapmak gerekir bir değişimdir, Nesne bağlam sınıfında kodlanmış olandan farklı bir bağlantı kullanmanız gerekmedikçe. " onlar vardı öğretici benim için iyi çalıştı

:

<asp:EntityDataSource ID="StudentsEntityDataSource" runat="server" 
     ContextTypeName="ContosoUniversity.DAL.SchoolEntities" 
     EnableFlattening="False" 
     EntitySetName="People" 
     EnableDelete="True" EnableUpdate="True"> 
    </asp:EntityDataSource> 

(proje adı yanı sıra) benim için fark benim varlık modeli DAL klasörüne yerleştirilir olmamasıdır. Bunun yerine Visual Web Developer's'ın varsayılan klasör adı önerisini kabul ettim. "App_Code" olduğuna inanıyorum. Ama ContextTypeName = "MyWebsite2011.App_Code.MyWebsite2011Entities" çalışmıyor. Tarayıcıyı başlattığımda, MyWebsite2011.App_Code.MyWebsite2011Entities türünün okunamadığından şikayet ediyor.

<asp:EntityDataSource ID="ProductTypeEntityDataSource" runat="server" 
     ContextTypeName="MyWebsite2011.App_Code.MyWebsite2011Entities" 
     EnableFlattening="False" EntitySetName="product_type"> 

Girmek için doğru ContextTypeName öğesini nasıl bulabilirim? Dediğim gibi, ConnectionString ve DefaultContainerName çalıştı, bu yüzden MyWebsite2011Entities tamam olduğunu sanırım. Herhangi bir ipucu takdir edilecektir çünkü adlandırma kuralını veya neyi arayacağımı bilmiyorum.

+0

ContextTypeName adınız yerine name.className başvurulan dosya adı. –

cevap

11

İçeriğin bildirildiği .cs dosyasını açın ve namespace bildiriminin hemen ardından metne bakın. Bu senin sınıfın ad alanı. ContextTypeName, <namespace>.<classname> (<> parantez olmadan) olmalıdır.

+0

Bunu App_Code/MyWebsite2011.edmx/MyWebsite2011.Designer.cs adresinde buldum. Doğru ContextTypeName MyWebsite2011Model.MyWebsite2011Entities olduğunu ortaya çıkıyor. Çok teşekkür ederim. –

+2

@Kasper Sorun değil! Bunu doğru cevap olarak işaretlemekte özgürsünüz. – dlev

0

Aynı Contoso Üniversitesi eğitimini izliyordum, ancak çevrimiçi bir veritabanı olarak Azure pencerelerini kullanıyordum.
Bu yüzden bu soruna da girdim.
Çevrimiçi veritabanını kullanırken bunu düzeltmek isteyen diğer kişiler için aşağıdakileri yaptım. senin EntityDataSource ile

yapın:
aşağıdaki kaldırın:

ConnectionString = ...
DefaultContainerName = ...

Ekleme:

OnContextCreating="EntityDataSource_ContextCreating"  

boş ContextTypeName bırakarak.
Ve nihayet karşılık gelen .cs aşağıdaki kodu uygulamak:

protected void EntityDataSource_ContextCreating(object sender, EntityDataSourceContextCreatingEventArgs e) 
{ 
    <ContainerName> context = new <ContainerName>(); 
    e.Context = ((IObjectContextAdapter)context).ObjectContext; 
} 

ContainerName

tabii sizin ContainerName olmak.
Orijinal soruya bakarsak, MyWebsite2011Entities olur.