EF Feature CTP5:原始 SQL 查询/命令支持
EF Feature CTP5:原始 SQL 查询/命令支持
EF feature CTP5 的一项新功能是通过 DbContext
支持原始 SQL 查询/命令。 在本文中,我将向您展示如何使用此功能的示例。 请注意,我提供的信息可能会在未来发生变化,因为它只是 CTP,而不是正式发布版。
DbContext 原始 SQL 查询/命令支持
EF feature CTP5 支持通过 DbContext
执行原始 SQL 查询和命令。 这种行为类似于 ObjectContext
提供的相同功能,该功能由 ExecuteStoreQuery<T>
和 ExecuteStoreCommand
方法公开。 您可以使用 DbContext
的 SqlQuery
和 SqlCommand
方法,这些方法由 DbContext.Database
属性公开。 方法执行的结果可以被物化为可以被 DbContext
跟踪的实体。 以下是如何使用这些方法的示例
class Program
{
static void Main(string[] args)
{
using (SchoolEntities context = new SchoolEntities())
{
IEnumerable sqlQuery = context.Database.SqlQuery(typeof(Department),
"select * from department");
foreach (Department item in sqlQuery)
{
Console.WriteLine(item.Name);
}
sqlQuery = context.Database.SqlQuery(typeof(Course), "GetCoursesOrderByTitle");
foreach (Course item in sqlQuery)
{
Console.WriteLine(item.Title);
}
var numberOfAffectedRows = context.Database.SqlCommand(
"DeleteDepartment @DepartmentID", new SqlParameter("DepartmentID", 8));
Console.WriteLine("Number of affected rows: {0}", numberOfAffectedRows);
}
}
}
在使用了与我先前示例相同的模型的程序中,我执行了两个查询(一个是原始 SQL,另一个是使用存储过程)和一个命令。 执行结果如下所示
摘要
总结一下 - 新的 CTP 允许运行原始 SQL 查询/命令。 这在 EF 无法支持或高级场景中非常有用。