В Entity Framework 6, заданном class A
и полученном class B: A
, я хотел бы загрузить сущности A
в экземпляры B
без необходимости кодировать каждое свойство.
Так дано:
public class A
{
public Guid AId { get; set; }
public string Value { get; set; }
}
public class B: A
{
[NotMapped]
public string OtherValue { get; set; }
}
public MyDbContext: DbContext
{
public DbSet<A> As { get; set; }
}
Я бы хотел:
using (MyDbContext db = new MyDbContext())
{
IEnumerable<B> Bs = db.As.LoadBsSomehow()
}
Полагаю, я мог бы добавить DbSet<B> Bs { get; set; }
, а затем в OnModelCreate
я мог бы переопределить имя таблицы на As
, возможно. Я бы хотел этого избежать, если смогу.
Цель этого состоит в том, что нам нужны модели представлений, которые нуждаются в базовой модели, а также некоторые другие свойства, и я не хочу путать модели со всеми различными свойствами моделей представлений. Это упростит кодирование и сопровождение при изменении основной модели - наследование будет автоматически обрабатывать изменения в производном классе (просмотр моделей).
Затем я могу установить дополнительные свойства Bs
в Select
или другом методе.
Кроме того, я НЕ хочу использовать отражение. Я могу написать это, если мне это нужно. Я бы лучше выяснил, есть ли у EF 6 возможность сделать это изначально.
ОБНОВЛЕНИЕ: я могу сделать DbContext.Database.SqlQuery<T>
. Я предпочел бы иметь возможность использовать LINQ вместо написания SQL. У меня нет проблем с написанием SQL, но LINQ намного проще в обслуживании с точки зрения кода. Возможно, если я смогу использовать LINQ для создания IQueryable<B>
и получения SQL для него?