web-dev-qa-db-fra.com

Entity Framework: nom de colonne non valide 'OrganizationStructure_ID'

Je reçois: ERREUR: nom de colonne non valide '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; }

INDEX ACTION:

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

En effet, vous n'avez pas associé votre propriété FK à une propriété de navigation. Je suppose que ParentID devrait désigner le parent OrganizationStructure et ChildrenItems devrait désigner les enfants OranizationStructures

Si votre modèle ne contient pas la propriété de navigation Parent dans parent OrganizationStructure, vous devez utiliser fluent-API pour indiquer à EF que ParentID est FK:

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

Ce que j’ai compris, c’est que lorsque vous avez une ICollection qui référence une table et qu’aucune colonne ne peut la comprendre, elle en crée une pour vous permettre d’essayer de faire le lien entre les tables. Cela se produit spécifiquement avec ICollection et m'a conduit "batty" en essayant de le comprendre.

5
drewid

J'ai eu un problème similaire, en supprimant l'entrée non souhaitée d'ICollection virtuelle publique, qui a été résolu.

3
SunGeo

Cela pourrait également être le cas si vous déclarez un champ de référence dans une entité enfant en tant que champ simple, mais pas une propriété! 

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
BotanMan

S'il s'agit d'un projet de test, assurez-vous que les chaînes de connexion sont mises à jour pour le projet de test.

0
Tosh

J'ai mis à niveau le projet vers une version plus récente de .Net Framework. Je suppose donc qu'il y avait un conflit avec les bibliothèques Entity Framework.

uninstall-package entityframework
install-package entityframework
0
The One