Entity Framework: недопустимое имя столбца 'OrganizationStructure_ID'
Я получаю: ERROR: Недопустимое имя столбца '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; }
УКАЗАТЕЛЬ:
return View(_organizationStructureRepository.GetAll().ToList()
.Where(t => t.ParentID == null));
Ответы
Ответ 1
Это потому, что вы не связали свое свойство FK с навигационным свойством. Я ожидаю, что ParentID
должен указывать на родительский OrganizationStructure
и ChildrenItems
должен указывать на детей OranizationStructures
.
Если ваша модель не содержит свойства навигации Parent
для родителя OrganizationStructure
, вы должны использовать fluent-API, чтобы сообщить EF, что ParentID
есть FK:
modelBuilder.Entity<OrganizationStructure>()
.HasMany(o => o.ChildrenItems)
.WithOptional()
.HasForeignKey(c => c.ParentID);
Ответ 2
То, что я понял, - это когда у вас есть ICollection, который ссылается на таблицу, и нет столбца, который он может определить, он создает один для вас, чтобы попытаться установить соединение между таблицами. Это особенно происходит с ICollection и заставило меня "батти" попытаться понять это.
Ответ 3
У меня была аналогичная проблема, устраняя нежелательный вход публичного виртуального ICollection, разрешив его.
Ответ 4
Это также может быть, если вы объявляете ссылочное поле в дочернем объекте как простое поле, но не свойство!
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)
Ответ 5
Если это тестовый проект, убедитесь, что строки подключения обновлены для тестового проекта