如何从表列中加载未映射到相应实体框架类型的值?

时间:2016-03-14 16:51:47

标签: c# entity-framework

假设有一个名为Info的表,该表未完全映射到其实体框架(EF)类型。它具有在EF类型和N个其他nvarchar列上可见的Id列,这些列是不可访问的,即在EF类型上映射。例如:

数据库表:

Id INT, column1 NVARCHAR, column2 NVARCHAR, ..., columnN  NVARCHAR

EF类型和上下文:

public class Info
{
   public int Id { get; set; }
}

public partial class MyDbContext : DbContext
{
    public MyDbContext() : base("name=myDbContext") { }

    public virtual DbSet<Info> Infos { get; set; }
}

问题1:

有没有办法在加载的EF实体上访问未映射的列?他们甚至装?例如,我想从column1..columnN

中检索new MyDbContext().Infos.First()的值

问题2:

我的假设是第一个问题的答案是否定的,所以这是后续问题:

通过使用EF,在不知道实际存在多少列的情况下,检索所有nvarchar列(在本例中为column1..columnN)的值的最佳方法是什么?换句话说,如何通过Id查询Info表并获取Dictionary<string, string> dictionary中的所有nvarchar列,以便访问dictionary["column1"]的值?假设我通过Id查询它,因此期望单个结果,即单个字典。

1 个答案:

答案 0 :(得分:1)

数据库上下文对象具有Database属性,该属性本质上是数据库连接。您可以通过此对象运行直接SQL查询。 This page显示了示例。

但是,您无法将列添加到EF对象中:毕竟,您已将它们从模型中排除,因此它们根据您的说明不存在。但是,您仍然可以创建自己的对象来保存它们。