使用Entity Framework 4执行自定义SQL

3
我需要从数据库中接收工作订单,这些订单是特定用户的。每个用户的筛选条件都不同,例如一个用户只处理所有运往英国的订单,而另一个用户只处理其他五个国家的订单,还有一个用户只处理高价值物品的订单,还有一个用户只处理包含超过10件商品的订单等等。
因此,我想到了一个解决方法(如果您有更好的方法,请告诉我!):我为每个用户创建一个视图,所有视图返回相同的数据,但筛选条件不同。
在ado.net中,我会这样做:
string sql = "select * from vwWorkOrders" + userName;
[rest of the ado.net here]

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


那是用户的名字,所以如果我已登录,我想从vwWorkOrdersMichel选择所有数据;如果您已登录,我想选择所有数据从vwWorkOrdersSaeed。 - Michel
1
请不要为每个用户创建一个视图,否则我的眼睛会流血。 - Richard Friend
@Richard,就像我说的那样:如果你有更好的想法,请射击它。看到你讽刺的话语让我觉得你有一个更好的想法,所以你是否愿意分享一下呢? - Michel
2个回答

9
您可以像以下示例中那样使用ExecuteStoreQuery方法
context.ExecuteStoreQuery<vwWorkOrder>(sql);

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


我认为这正是我想要的,我会立即尝试! - Michel

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接