Pregunta Entity Framework: nombre de columna inválido 'OrganizationStructure_ID'


Obtengo: ERROR: 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; }

ACCIÓN DEL ÍNDICE:

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

32
2018-01-25 03:45


origen


Respuestas:


Esto se debe a que no emparejó su propiedad FK con una propiedad de navegación. Espero que 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 para padres OrganizationStructure debe usar la API con fluidez para decirle a EF que ParentID es FK:

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

39
2018-01-25 09:49



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


3
2017-12-18 08:43



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


3
2018-03-04 16:48



También podría ser si declaras el campo de referencia en la entidad hijo 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)

1
2017-10-21 12:04



Si se trata de un proyecto de prueba, asegúrese de que las cadenas de conexión estén actualizadas para el proyecto de prueba


0
2018-04-23 19:40