2011-09-26 16 views
6

Estoy usando Entity Framework 4.1 con un patrón de repositorio (la base de datos ya existe). Mi problema es la existencia de una tabla llamada GRUPO (que está reservado). Esta es una base de datos de producción que no puedo cambiar.'Grupo' es una palabra clave reservada y no se puede usar como un alias, a menos que se haya escapado

Por lo tanto, el uso de todas estas técnicas anteriores que estoy recibiendo el siguiente error:

'Grupo' es una palabra clave reservada y no se puede utilizar como un alias, a menos que se escapó.

¿Es posible decir Marco de la entidad a utilizar los siguientes como el nombre de tabla: [GRUPO]

EDITAR La clase con el contexto db tiene el siguiente aspecto (simplificada)

public class AMTDatabase : DbContext 
    { 

     private IDbSet<GROUP> _Groups; 
     public IDbSet<GROUP> Group 
     { 
     get { return _Groups ?? (_Groups = DbSet<GROUP>()); } 
     } 


    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    {   
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<GROUP>().ToTable("GROUP");  
    } 
    //etc 
    } 

Gracias de antemano

+0

Quién te está dando este error? ¿Está en Visual Studio o es su base de datos? ¿Puedes publicar el código de tu clase que tiene el problema? –

+0

@AlexandreJobin: recibo el error en VS. Ver también EDITAR. –

Respuesta

1

Pues parece muy raro, pero notan el nombre de propiedad superior, el nombre del grupo y se debe leer los grupos! Esta es la razón por la que recibo este error. El código corregido es el siguiente:

private IDbSet<GROUP> _Groups; 
     public IDbSet<GROUP> Groups 
     { 
      get { return _Groups ?? (_Groups = DbSet<GROUP>()); } 
     } 

funciona como un encanto ahora!

+0

Acabo de encontrar lo mismo y el resultado me parece muy extraño. Incluso el uso de 'context.Set () .ToList()' funciona, pero 'context.Group.ToList()' no. Extraño ... – Slauma

+0

Entonces, ¿qué significa esto ... estoy confundido! ¿No podemos elegir el nombre que nos gustaría para el DBSet? –

+1

Así que parece. Acabo de probar para dar nombres 'DbSet ' como 'Seleccionar',' Unir' y 'Dónde'. Todos arrojan la misma excepción. EF parece comparar con una lista de palabras clave SQL. El nombre de la entidad 'Group' en sí mismo no es el problema. – Slauma

0

Intente utilizar otra denominación para que la clase y decirle a usar la tabla de grupo en su base de datos de este modo:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{   
    base.OnModelCreating(modelBuilder); 
    modelBuilder.Entity<MyGroup>().ToTable("GROUP");  
} 

o con los atributos directamente en la clase de entidad:

[Table("Group")] 
public class MyGroup 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    [Column("GroupId")] 
    public int GroupId { get; set; } 
} 
Cuestiones relacionadas