我正在尝试使用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
属性。
要使这些数据正确映射到我的对象,我是否缺少步骤?
答案 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();