Я использую MVC3 с EF (версия 4, но не уверен, что 4.0.4.1 и т. Д.). Я боролся с этим со вчерашнего дня, и я нигде не нахожу ответа. Я использую книгу "Pro Entity Framework 4.0".
Я использовал подход Model First, и потому что я хочу использовать наследование, я создал базовую модель для проведения первых тестов (извините, нажмите на ссылку, у меня недостаточно представителя для размещения изображения):
Модель EF
Затем с этой моделью я создал базу данных. Я не очень доволен соглашением об именах, потому что, несмотря на множественное число имен сущностей, для таблицы производного класса было создано имя таблицы с префиксом-одиночкой. Извините, у меня не установлена SSMS, но посмотрите через обозреватель сервера, см. Рисунок:
БД, созданная на основе модели EF
Затем я создал контроллеры для BaseClass с шаблоном «Контроллер с действиями чтения / записи и представлениями, используя Entity Framework». Работает отлично! Здесь созданы все виды CRUD.
Например, в представлении Details у меня есть этот код:
//
// GET: /BaseClass/Details/5
public ViewResult Details(int id)
{
BaseClass baseclass = db.BaseClasses.Single(b => b.Id == id);
return View(baseclass);
}
Работает нормально.
Затем я сделал то же самое для DerivedClass и получил контроллер со всеми действиями CRUD и представлениями. А теперь проблема. Например, контроллер Details DerivedClass выглядит следующим образом:
//
// GET: /DerivedClass/Details/5
public ViewResult Details(int id)
{
DerivedClass derivedclass = db.BaseClasses.Single(d => d.Id == id);
return View(derivedclass);
}
Как вы можете видеть, он пытается получить db.BaseClasses вместо db.DerivedClasses, с ошибкой компиляции, но db не предоставляет никакого доступа к сущности DerivedClass, в db нет ничего общего с DerivedClass.But если я создаю вручную экземпляр DerivedClass в коде, то это возможно:
MyNamespace.Blablabla.Site.Models.DerivedClass dev = new Models.DerivedClass();
Я что-то упустил? Заранее спасибо.