Entity Framework: неверное имя столбца 'OrganizationStructure_ID' - PullRequest
36 голосов
/ 25 января 2012

Я получаю: ОШИБКА: Неверное имя столбца '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));

Ответы [ 6 ]

43 голосов
/ 25 января 2012

Это потому, что вы не связали свое свойство FK со свойством навигации. Я ожидаю, что ParentID должен указывать на родителя OrganizationStructure, а ChildrenItems должен указывать на детей OranizationStructures.

Если ваша модель не содержит Parent свойство навигации к родителю OrganizationStructure, вы должны использовать fluent-API, чтобы сообщить EF, что ParentID - это FK:

modelBuilder.Entity<OrganizationStructure>()
            .HasMany(o => o.ChildrenItems)
            .WithOptional()
            .HasForeignKey(c => c.ParentID);
6 голосов
/ 18 декабря 2013

Я понял, что когда у вас есть ICollection, которая ссылается на таблицу, и нет столбца, который он может вычислить, он создает один для вас, чтобы попытаться установить связь между таблицами.Это в особенности происходит с ICollection и заставляет меня пытаться разобраться в этом.

3 голосов
/ 04 марта 2015

У меня была похожая проблема, удаление нежелательной записи публичной виртуальной ICollection, решило ее.

1 голос
/ 21 октября 2015

Это также может быть, если вы объявите ссылочное поле в дочернем объекте как простое поле, но не как свойство!

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)
0 голосов
/ 21 февраля 2019

Я обновил проект до более новой версии .Net Framework, поэтому я полагаю, что возник конфликт с библиотеками Entity Framework, удаление / установка Entity Framework мне помогло

uninstall-package entityframework
install-package entityframework
0 голосов
/ 23 апреля 2018

Если это тестовый проект, убедитесь, что строки подключения обновлены для тестового проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...