Entity Framework 6 загружает производный класс сущности - PullRequest
1 голос
/ 14 июня 2019

В 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 для него?

...