我正在尝试使用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
属性。
为了使这些数据正确映射到我的对象,我是否缺少一个步骤?
你不能完全做你正在做的per the documentation:
摘抄:
SQL查询不能包含相关数据。但是,在许多情况下,您可以使用Include运算符在查询之上进行组合以返回相关数据(请参阅包括相关数据)。
以下是相关数据:
public Ord PatientOrder {get; set;}
如果您正在对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();