使用实体framework4执行自定义sql

时间:2010-11-15 14:24:49

标签: c# entity-framework entity-framework-4

我必须从数据库接收特定于用户的工作人员。

所有用户的过滤器都不同,因此必须将所有订单发送到英国,其他所有订单都运送到其他5个国家/地区,其中一个订单执行所有高价值的商品,其中一个订单执行包含的订单> 10项等。

所以,我想出了这个想法(如果你有更好的想法,可以拍摄它!)

我为每个用户创建一个视图,所有视图都返回相同的数据,但过滤器不同。

在ado.net中我会做这样的事情:

string sql = "select * from vwWorkOrders" + userName;
[rest of the ado.net here]

但现在我正在使用ef4,我想知道这种代码的等价物是什么。

2 个答案:

答案 0 :(得分:9)

您可以使用以下示例中的ExecuteStoreQuery method

context.ExecuteStoreQuery<vwWorkOrder>(sql);

此方法允许您执行存储SQL并获取强类型结果 如果您需要传递一些参数,只需在ExecuteStoreQuery的调用中传递必要的ObjectParameter实例。

答案 1 :(得分:3)

您可以使用eSQL,它可以让您的查询更加灵活。您可以预先下载LinqPad来使用它。

// whereClause is a string
string query = string.Format("select * from ObjectContext.vwWorkOrders where {0}", whereClause);

然后只需使用EntityConnectionEntityCommand类来执行命令,并以与ADO.NET完全不同的方式遍历结果。

编辑:我刚刚看到你的评论;我认为你的例子中有一个拼写错误。您正在尝试实现的更合适的代码段:

// userName is a string, ie "Michel"
string query = string.Format("select * from ObjectContext.vwWorkOrders{0}", userName);