У меня есть некоторые простые объектыMVC4 и Entity Framework Наследование и Include
public class DataClass
{
public int id;
public string Data;
}
public class Job()
{
public int id;
}
public class NewJob : Job
{
public DateTime StartDate;
public DataClass data;
}
Я тогда определил их в моем DbContext()
public DbSet<Job> Jobs { get; set; }
public DbSet<DataClass> DataClass { get; set; }
Теперь, если я использую следующий код
NewJob job = (NewJob) db.Jobs.Find(id);
Это работает нормально, но возвращает «данные» в качестве нуля
Я знаю, что я определяю класс с ключевым словом virtual, и он работает и заполняет объект «data».
public class NewJob : Job
{
public DateTime StartDate;
public virtual DataClass data;
}
Но в моем случае я, как правило, не хочу, чтобы объект данных был заполнен. Поэтому мне нужно загрузить его по требованию.
Если я пытаюсь что-то вроде
NewJob job = (NewJob)db.Jobs.Include("data").First();
я получаю исключение
А указанный Включать путь не является допустимым. EntityType «Models.Job» не объявляет свойство навигации с именем «данные».
Я думаю, это потому, что он смотрит на «работу», а не на «NewJob», когда он пытается включить include.
Мне также не нравится включать строку, не проверяя время разработки.
Привет, вы говорите, что тип кастинга - очень плохая идея - почему это? Логически это то, что я хочу делать с объектом. – Chris
Извините за поздний ответ, был довольно занят. Вы просто хотите использовать литье типов, когда хотите преобразовать объект в свою базовую модель или наоборот.Бросить один объект на совершенно другой объект без полиморфных отношений - это плохая практика и плохая идея, поскольку она может вводить необработанные исключения/ошибки, которые вы не будете контролировать. Вам лучше делать некоторые типы картографирования, и в этом случае у вас будет больше контроля над вашими конверсиями. – RiceRiceBaby