2016-04-12 8 views
2

Я знаю проблему ... Мне не хватает сопоставления, чтобы помочь EF понять взаимосвязь между моими двумя таблицами, но я не вижу, где моя ошибка. Я провел большую часть дня на этом ... помимо встреч ... и просто нужно быстро похлопать по лицу с отсутствующей информацией.Недопустимое имя столбца * Id

У меня есть веб-Api, использующий EF CF 7. Я могу запросить штраф и получить данные родительской таблицы, но когда я пытаюсь включить реальные дочерние данные, я получаю недопустимую ошибку столбца.

Мои две таблицы выглядеть следующим образом:

public class Categories 
{ 
    private ICollection<SubCategories> _subcat; 
    public int Id { get; set; } 
    public string Category { get; set; } 
    public virtual ICollection<SubCategories> SubCategories 
    { 
     get { return _subcat ?? (_subcat = new List<SubCategories>()); } 
     set { _subcat = value; } 
    } 
} 

public class SubCategories 
{ 
    public int Id { get; set; } 
    public string SubCategory { get; set; } 
} 

Вышеуказанные классы соответствуют моим дб схемы КРОМЕ таблица Подкатегории имеет столбец CategoryId и это FK в родительской таблице столбец Id.

Мой репозиторий запрос выглядит следующим образом:

return _context.Categories.Include(i => i.SubCategories).ToList(); 

Теперь ошибка бросает меня ... и я смутно помню, что он должен делать с EF конкатенации имя. В этом опыте был базовый класс, который определял Id, поэтому, когда я определил его в своем классе, он столкнулся с конфликтом, но это не так.

Недопустимое название столбца 'CategoriesId'.

Итак, у меня есть google и провел день на нескольких статьях, но либо я не понял полностью, либо они не были моей проблемой ... вероятно, первой.

+1

Спасибо за модель, но можете ли вы включить код отображения? – Igor

+0

Также включите свой объект DbContext! – Fals

+2

Вы должны добавить частный конструктор и добавить эту логику внутри SubCategories = new List ()) вместо того, чтобы делать это внутри блока свойств. – Fals

ответ

3

Вышеуказанные классы соответствуют моей БД схемы КРОМЕ таблицы Подкатегории имеет столбец CategoryId и это FK в родительской таблице столбец Id.

Если ваша таблица названа категориями, но ваш FK называется CategoryId, у вас возникнет проблема. Несогласованная плюрализация.

Либо переименуйте FK в CategoriesId, либо еще лучше следуйте более распространенному соглашению уникальных имен классов (только экземпляры коллекций являются множественными) и измените имя таблицы и класса на категорию.

+0

Вот и все. Несогласованная плюрализация - это новая тема для чтения. У меня также были некоторые имена столбцов в db, не упомянутых в OP. Я был edjumakated. Спасибо! – GPGVM

+0

@GPGVM Большая часть этой информации рассматривается как «соглашения EF», которые описывают имена вещей, основанные на именах других вещей, и аналогичные понятия: https://msdn.microsoft.com/en-us/data /jj679962.aspx – AaronLS

Смежные вопросы