📜  db.Database.SqlQuery - SQL (1)

📅  最后修改于: 2023-12-03 14:40:38.773000             🧑  作者: Mango

使用 db.Database.SqlQuery - SQL

在 Entity Framework 中,使用 db.Database.SqlQuery 可以执行原生 SQL 查询,而不必将其映射到实体类。

语法
IEnumerable<TEntity> db.Database.SqlQuery<TEntity>(string sql, params object[] parameters)

其中:

  • TEntity:查询结果要映射到的实体类类型。
  • sql:原生 SQL 查询语句。
  • parameters:可选的查询参数。
返回值

查询返回的结果类型为 IEnumerable<TEntity>,需要手动将其映射到实体类中,例如:

string sql = "SELECT * FROM Customers WHERE Country = @p0 AND City = @p1";
object[] parameters = new object[] { "USA", "New York" };
IEnumerable<Customer> results = db.Database.SqlQuery<Customer>(sql, parameters);

foreach (var customer in results)
{
    Console.WriteLine(customer.Name);
}
注意事项
  • 当使用 db.Database.SqlQuery 查询时,不能使用延迟加载(LazyLoadingEnabled)和代理生成(ProxyCreationEnabled)。
  • 查询参数可以直接写在原生 SQL 语句中,也可以使用 @p0 形式的占位符参数,与 parameters 数组中的元素一一对应。
  • 使用原生 SQL 查询也容易出现 SQL 注入,需要注意字符串参数的转义问题。

使用 Entity Framework 的 db.Database.SqlQuery 可以快速方便地执行原生 SQL 查询,并将结果映射到实体类中,但也需要注意一些使用细节和风险。