在实体框架6中,给定class A
并派生出class B: A
,我想将实体A
加载到B
的实例中,而不必为每个属性进行编码。 / p>
所以给定了:
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吗?