我可以使用Entity Framework操纵存储过程的内容吗?

时间:2013-02-19 08:33:39

标签: asp.net entity-framework

到目前为止,我一直在使用经典的ADO.NET模型进行数据库访问。我必须告诉你,我对它很满意。但我最近也听说过很多关于Entity Framework的内容,所以我想我可以尝试一下。实际上推动我的主要原因是需要找到一种方法来构建我的存储过程的WHERE子句。使用经典方式,我必须执行以下任一操作:

  1. 根据用户输入在客户端构建WHERE子句,并将其作为VARCHAR2参数发送到存储过程,将WHERE子句与SQL的主要部分连接,并将整个字符串传递给EXECUTE_IMMEDIATE函数。我个人不愿意这样做。
  2. 在Stored Procedure内部构造了大量的SQL语句,这意味着我必须考虑到WHERE子句可能构成的所有可能组合。这似乎比第一种情况更糟。
  3. 我知道EF也可以使用存储过程。但是可以动态构建WHERE部分吗? EF能以某种方式拯救我吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以在Linq中使用动态查询。

  1. Dynamic Query LIbrary
  2. 来自scott gu示例

    var query = Northwind.Products.Where("Lastname LIKE "someValue%");
    

    或一些复杂的查询

    var query =
        db.Customers.
        Where("City = @0 and Orders.Count >= @1", "London", 10).
        OrderBy("CompanyName").
        Select("new(CompanyName as Name, Phone)");
    

    或从此回答Where clause dynamically.

    var pr = PredicateBuilder.False<User>();
    foreach (var name in names)
    {
        pr = pr.Or(x => x.Name == name && x.Username == name);
    }
    return query.AsExpandable().Where(pr);