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

问题描述 投票:0回答:2

我正在尝试使用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对象只有一个null PatientOrder属性。所以看起来查询正在运行,并返回结果,但没有将结果映射到PatientOrder属性。

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

c# sql entity-framework-core
2个回答
1
投票

你不能完全做你正在做的per the documentation:

摘抄:

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

以下是相关数据:

public Ord PatientOrder {get; set;}

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();
© www.soinside.com 2019 - 2024. All rights reserved.