实体框架核心查询类型未将结果映射到对象

时间:2019-02-22 18:45:25

标签: c# sql entity-framework-core

我正在尝试使用Entity Framework Core 2.1中的新DBQuery功能执行sql查询。我的模型中有一个看起来像这样的实体:

public class Ord
{
    public Guid Id {get; set;}
    public Guid ColumnOne {get; set;}
    public Guid ColumnTwo {get; set;}
}

我创建了一个名为TestQuery的对象,如下所示:

public class TestQuery
{
    public Ord PatientOrder {get; set;}
}

我向数据库上下文类添加了一个新的DBQuery,如下所示:

public DbQuery<TestQuery> TestQuery { get; set; }

然后,我尝试使用FromSql执行查询,如下所示:

var query = "select PatientOrder.Id as PatientOrderId,
                    PatientOrder.ColumnOne as PatientOrderColumnOne,
                    PatientOrder.ColumnTwo as PatientOrderColumnTwo
             from Ord PatientOrder"

var test = await _context.TestQuery.FromSql(query).ToListAsync();

列表test具有我期望的确切结果数。但是,每个TestQuery对象只有一个空的PatientOrder属性。因此,查询似乎正在运行,并且返回结果,但未将结果映射到PatientOrder属性。

要使这些数据正确映射到我的对象,我是否缺少步骤?

2 个答案:

答案 0 :(得分:1)

您不能完全按照per the documentation:

的方式做

节选:

  

SQL查询不能包含相关数据。但是,在许多情况下,您可以使用Include运算符在查询之上进行组合以返回相关数据(请参阅包括相关数据)。

以下是相关数据:

public Ord PatientOrder {get; set;}

答案 1 :(得分:0)

如果您要对TestQuery进行查询,且该查询具有相关数据PatientOrder,则应使用Include

https://docs.microsoft.com/en-us/ef/core/querying/raw-sql#including-related-data

var query = "/* do your query, but include the PatientOrderId */";
var test = await _context.TestQuery.FromSql(query).Include(t=>t.PatientOrder).ToListAsync();
相关问题