2012-01-25 14 views
30

Aparece: ERROR: Nombre de columna no válido 'OrganizationStructure_ID'.Entidad Marco: Nombre de columna inválido 'OrganizationStructure_ID'

public OrganizationStructure() 
    { 
     ChildrenItems = new HashSet<OrganizationStructure>(); 
     InputDate = DateTime.Now; 
    } 

    public int ID { get; set; } 
    public string Name { get; set; } 

    public virtual int? ParentID { get; set; } 
    public int OrganizationID { get; set; } 
    public int OrganizationTypeID { get; set; } 
    public int OrganizationActivityID { get; set; } 
    public int OrganizationLocationID { get; set; } 

    public string AddRemark { get; set; } 
    public int UserId { get; set; } 
    public DateTime InputDate { get; set; } 
    public int? RemAttr { get; set; } 

    public virtual ICollection<OrganizationStructure> ChildrenItems { get; set; } 

ÍNDICE DE ACCIÓN:

return View(_organizationStructureRepository.GetAll().ToList() 
      .Where(t => t.ParentID == null)); 
+0

es 'OrganizationStructure' una entidad (de EF?) ¿Cuál es la excepción que obtienes? – gideon

+1

EF, Excepción: nombre de columna no válido 'OrganizationStructure_ID' –

+2

Aparentemente, la clave externa automática llamada cambió de {entity} ID a {entity} _ID en algún momento. EF5 quizás. –

Respuesta

37

Eso es porque no asociar el FK propiedad con una propiedad de navegación. Supongo que el ParentID debe señalar al padre OrganizationStructure y ChildrenItems debe apuntar a los niños OranizationStructures.

Si su modelo no contiene Parent propiedad de navegación a los padres OrganizationStructure debe utilizar con fluidez-API para decirle a EF que ParentID es FK:

modelBuilder.Entity<OrganizationStructure>() 
      .HasMany(o => o.ChildrenItems) 
      .WithOptional() 
      .HasForeignKey(c => c.ParentID); 
+3

¿dónde pone uno este código? –

+3

@boomhauer: anule el método 'OnModelCreating' en su clase derivada' DbContext' y coloque todas las asignaciones allí. Otra opción es usar la clase derivada 'EntityTypeConfiguration' y registrarla en' OnModelCreating'. –

+0

Sin embargo, me gustaría saber cómo agregar un atributo de clave foránea al modelo que se encargó de esto. pero gracias –

3

Lo que he descubierto es cuando se tiene un ICollection que hace referencia a una tabla y no hay ninguna columna que pueda encontrar, crea una para que usted intente establecer la conexión entre las tablas. Esto sucede específicamente con ICollection y me ha llevado a ser "chiflado" tratando de resolverlo.

3

Tuve un problema similar, eliminando la entrada no deseada de ICollection virtual público, lo resolví.

+0

You da man ... fastidiarme durante los últimos 60 minutos – Tosh

+0

Lo mismo aquí, esto me mató hasta que encontré esto – stillsmallvoice

1

¡También podría ser si declara el campo de referencia en la entidad hija como un campo simple, pero no una propiedad!

int ParentId //will be ignored; 

int ParentId {get; set;} // it'ok (but could be ignored 
         //if the parent entity name isn't 'Parent'); 

[ForeignKey("MyParentEntity")] 
int ParentId {get; set;} // is the best way (or use fluent-api) 
Cuestiones relacionadas