Итак, я решил использовать сначала код / DbContext, но уже есть файл базы данных. Ничего сложного, поэтому я думаю, что могу просто создать производный контейнерный класс DbContext с DbSets для соответствующих POCO, создать строку подключения к моей базе данных, и я должен быть установлен. Однако я считаю, что у меня возникают трудности с правильным объявлением свойств в моих классах сущностей, поскольку я получаю ошибки при попытке получить доступ к объекту через навигационные свойства. Обычно говорит мне Object reference not set to an instance of an object
, когда я пытаюсь context.Products.Find(1).Category.CATNAME;
и т. Д. Также пытался объявить свойства коллекции с виртуальным ключевым словом безрезультатно.
Некоторые особенности схемы базы данных:
В таблице категорий PCATID является внешним ключом для CategoryID в
та же таблица категорий и может быть нулевой.
И CategoryID, и RootCategoryID в таблице "Продукты" могут иметь значение null и
оба являются внешними ключами для CategoryID в таблице категорий.
В данный момент я тестирую вещи, но со временем для многих полей я буду устанавливать ненулевые типы.
Вот мои POCO сущности и класс контейнера Dbset сущности:
public class Category
{
[Key]
public int CategoryID { get; set; }
public string CATNAME { get; set; }
public int PCATID { get; set; }
public ICollection<Category> Categories { get; set; }
public ICollection<Product> Products { get; set; }
}
public class Product
{
[Key]
public int ProductID { get; set; }
public int CategoryID { get; set; }
public int RootCategoryID { get; set; }
public string Name { get; set; }
public string ShortDescription { get; set; }
public string LongDescription { get; set; }
public string Keywords { get; set; }
public decimal ListPrice { get; set; }
public Category Category { get; set; }
}
public class EFDbContext: DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}