2011-05-21 12 views
6

Estaba siguiendo el tutorial de la Universidad Contoso en el sitio web asp.net y todo funciona bien. Mi próximo paso fue replicar algunas de las cosas en mi propio sitio web nuevo. He añadido un EntityDataSource que funciona:Pregunta de novato: Necesita ayuda con ContextTypeName

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

Y de acuerdo con el tutorial que es una buena idea cambiar el ConnectionString y DefaultContainerName con un ContextTypeName.

"En el margen de beneficio para el control EntityDataSource, retire la ConnectionString y DefaultContainerName atributos y reemplazarlos con un ContextTypeName =" "atributo ContosoUniversity.DAL.SchoolEntities. Este es un cambio que debe realizar cada vez que se crea un control EntityDataSource, a menos que necesites usar una conexión que sea diferente de la que está codificada en la clase de contexto del objeto ".

Eso funcionó bien para mí en el tutorial donde tenían una:

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

La diferencia para mí (además del nombre del proyecto) es que mi modelo de entidad no se coloca en una carpeta DAL. En su lugar, acepté la recomendación de nombre de carpeta predeterminada del Desarrollador Web Visual. Creo que fue "App_Code". Pero el ContextTypeName = "MyWebsite2011.App_Code.MyWebsite2011Entities" no funciona. Cuando inicio el navegador, se queja de que no se pudo leer el tipo MyWebsite2011.App_Code.MyWebsite2011Entities.

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

¿Cómo puedo encontrar el ContextTypeName correcto para poner? Como dije, ConnectionString y DefaultContainerName funcionaron, así que supongo que MyWebsite2011Entities está bien. Cualquier sugerencia sería apreciada porque no conozco la convención de nombres o qué buscar.

+0

ContextTypeName se refiere a su namespace.className en lugar de al nombre de archivo. –

Respuesta

11

Abra el archivo .cs en el que se declara el contexto, y observe el texto inmediatamente después de la declaración namespace. Ese es el espacio de nombres de tu clase. Su ContextTypeName debe ser <namespace>.<classname> (sin los corchetes <>, por supuesto.)

+0

Lo encontré en App_Code/MyWebsite2011.edmx/MyWebsite2011.Designer.cs. Resulta que el ContextTypeName correcto era MyWebsite2011Model.MyWebsite2011Entities. Muchas gracias. –

+2

@Kasper ¡No hay problema! Siéntase libre de marcar esto como la respuesta correcta. – dlev

0

Estaba siguiendo el mismo tutorial de Contoso University pero estaba usando Windows Azure como una base de datos en línea.
Así que también encontré este problema.
Para otras personas interesadas en cómo solucionar esto cuando se utiliza una base de datos en línea, hice lo siguiente.

Con su EntityDataSource hacer:
eliminar lo siguiente:

ConnectionString = ... =
DefaultContainerName ...

Añadir:

OnContextCreating="EntityDataSource_ContextCreating"  

Dejando ContextTypeName vacía.
Y finalmente implementar el código siguiente en el archivo .cs correspondientes:

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

ContainerName ser su ContainerName por supuesto.
Si analizamos la pregunta original, sería MyWebsite2011Entities.

Cuestiones relacionadas