2012-01-06 13 views
6

Tengo un sitio web de datos dinámicos ASP.NET 4 que se ejecuta en un conjunto bastante simple de tablas de bases de datos expuestas a través de un modelo Entity Framework en otro ensamblado. No quiero a todos andamio de las tablas en el modelo EF, así que en mi archivo Global.asax, he inicializado el modelo por defecto de esta manera:ASP.NET Datos dinámicos que no ven metadatos parciales clase "amigo"

DefaultModel.RegisterContext(typeof(MyCompany.MyProject.DataModel.DataContext), new ContextConfiguration() { ScaffoldAllTables = false });

La documentación de MSDN (y los comentarios en el archivo global.asax) dicen que ahora debería poder activar selectivamente el andamiaje de tablas individuales agregando el atributo [ScaffoldTable(true)] a su clase parcial de "amigo". Que he hecho hasta la siguiente manera:

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.DynamicData; 

namespace MyCompany.MyProject.DataModel 
{ 
    [MetadataType(typeof(InHouseClaimMetadata))] 
    [ScaffoldTable(true)] 
    public partial class InHouseClaim 
    { 
     [DisplayName("In-House Claims")] 
     [TableName("In-House Claims")] 
     public class InHouseClaimMetadata 
     { 
      [DisplayName("Reporting Date")] 
      public object ReportingDate { get; set; } 

      // etc etc... 
     } 
    } 
} 

Pero cuando se carga Default.aspx, me sale el siguiente mensaje de error:

No hay tablas accesibles. Asegúrese de que al menos un modelo de datos esté registrado en Global.asax y el andamiaje esté habilitado o implemente páginas personalizadas.

He conseguido que esto funcione en situaciones similares anteriormente; la única diferencia con este intento es que mi modelo EF es su propio ensamblaje. Si cambio el archivo global.asax para continuar y andamiar todas las tablas, funciona bien. Pero obviamente, no quiero eso. Fui cuidadoso para asegurarme de que el espacio de nombres para la clase de metadatos parciales coincida con el espacio de nombres del contexto de datos de EF.

Así que estoy confundido ...

+0

Este tipo estaba muy por delante de mí: http://stackoverflow.com/questions/647385/is-it-possible-to- have-two-partial-classes-in-different-assemblies-represent-the –

Respuesta

4

Así que, soy un idiota: esto no es un problema de EF o datos dinámicos, es una restricción de C#. De MSDN:

Todas las definiciones de tipo parcial destinado a ser partes del mismo tipo deben ser definidas en el mismo ensamblaje y el mismo módulo (.exe o .dll archivo). Las definiciones parciales no pueden abarcar múltiples módulos.

1

He tratado de volver a crear el escenario, y en lugar de utilizar la propiedad mappging He probado con el siguiente código:

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.DynamicData; 

namespace MyCompany.MyProject.DataModel 
{ 
    [MetadataType(typeof(InHouseClaimMetadata))] 
    [ScaffoldTable(true)] 
    public partial class InHouseClaim 
    { 
     public class InHouseClaimMetadata 
     { 

     } 
    } 
} 

Esto funciona si el espacio de nombre del contexto de datos EF coincide con el de las clases parciales. ¿Puedes probar y comentar los mapeos de propiedades para eliminarlos como un problema y ver cómo vas desde allí?

+0

Sin suerte. Pero su respuesta me llevó a desvincular mi código al escenario mínimo para identificar el problema más claramente. –

1

lo que funcionó para mí fue, en el Explorador de soluciones, haga clic en el archivo .cs que contiene mis clases parciales, seleccionando Propiedades, y el establecimiento de ampliar la acción para compilar. Por alguna razón, la Acción de compilación del archivo se estableció en Contenido de forma predeterminada. (Me tomó horas para resolver esto. Afortunadamente, esto le ahorrará tiempo a alguien.)

+0

No cree estos archivos en la carpeta _App_Code_. – ofthelit

Cuestiones relacionadas