Подтвердить что ты не робот

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));
4b9b3361

Ответ 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

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