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));
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);
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.
J'ai eu un problème similaire, en supprimant l'entrée non souhaitée d'ICollection virtuelle publique, qui a été résolu.
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)
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.
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