2

目标

在使用 C#.NET + MVC 4 + Entity Framework + MySQL 的应用程序中进行自定义¹查询。

问题

我想执行查询并返回结果以查看,但我不知道该怎么做。

是)我有的

以下查询返回一些productName, minProductprice, maxProductPrice (我想在我的视图中显示它)

SELECT MIN(`map`.`Product_Price`) as `minProductPrice`,
       MAX(`map`.`Product_Price`) as `maxProductPrice`,
       `pr`.`Product_Name` as `productName`
FROM `bm_market_products` `map` join
     `bm_products` as `pr`
     on map`.`Product_Id` = `pr`.`Product_Id`
group by `map`.`Product_Id`

重复的问题?

我想不是。我发现了这个问题,并且有一个相似的标题,但似乎上下文不同。

问题

那么,我该如何解决我的问题呢?

细节

¹:“自定义”是指实体框架创建的默认 CRUD 之外的东西。我之前显示的查询默认情况下没有完成——我想执行它。

提前致谢!

4

3 回答 3

0

为什么不可以使用 SqlDataAdapter 和 DataSet,因为实体框架现在知道“动态查询”,然后您可以在需要的地方显示它们。

希望能帮助到你。

于 2013-06-10T14:26:24.720 回答
0

我正在使用(派生自直接执行SQL)的ExecuteStoreQuery方法。我不确定这是最好的方法,但经过大量搜索,这是我能找到的最好的方法:ObjectContextDbContext

public class ResultObject
{
    public string ProductName { get; set; }
    public decimal MinProductPrice { get; set; }
    public decimal MaxProductPrice { get; set; }
}

//Within your Control or somewhere common
public IList<TResult> ExecuteSql<TResult>(string sql)
{
    var results = ((IObjectContextAdapter)DbContext).ObjectContext.ExecuteStoreQuery<TResult>(sql);
    return results;
}

//Then, when you need the results, call the ExecuteSql method:
var productInfo = ExecuteSql<ResultObject>(mySql);

所有标准警告都适用于 inline-sql,包括清理用户输入数据,以及这是一个坏主意(您可能应该考虑使用存储过程)。这也适用于存储过程,因为如果需要,您可以将参数集合传递给ExecuteStoreQuery方法。

于 2013-06-10T14:27:48.720 回答
0

在Brian S的帮助下,我可以得出结论,更简洁的方法是使用存储过程。我完全是初学者,我在这里找到了解决方案,位于 MySQL 文档的“使用存储例程”帖子中

顺便说一句,感谢您的帮助。

更新 v1

Coskun Sunali的“Querying MySQL using Entity Framework and MySQL Stored Procedures”是一篇教授使用 EF + 存储过程的好方法的帖子。对于我作为初学者来说,这是一个很好的解决方案!

于 2013-06-10T16:08:06.217 回答