问题:我正在尝试在实现IDataContext
的控制器中运行存储过程。
我知道如何调用databaseContext.Database.SqlQuery <string>
...,但是在IDataContext
中没有公开Database
类。我正在寻找在Database
接口中公开IDataContext
类的正确方法的示例,以便可以正确模拟IDataContext
并能够调用IDataContext.Database.SqlQuery<string>
。
public class MyController : ODataController
{
private IDataContext _db = new DataContext();
[HttpPost]
[ODataRoute("RunFile()")]
public IHttpActionResult RunFile()
{
//..code omitted for brevity
var result = _db.Database.SqlQuery<int>("exec MyStoredProc").ToList();
return Ok(result);
}
}
我已经看到了一个与我要问的问题类似的问题,但是我正在寻找此问题中发布的答案的示例。 link to Original post
基本上寻找如何在
Database
中公开IDataContext
类的示例。 最佳答案
我建议不要泄漏该实现问题。而是通过更新界面仅公开所需的功能
public interface IDataContext {
//...other members
IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters);
int ExecuteSqlCommand(string sql, params object[] parameters);
}
和实施。
public class DataContext : DbContext, IDataContext {
//...other code removed for brevity
public IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters) {
return Database.SqlQuery<TElement>(sql,parameters);
}
public int ExecuteSqlCommand(string sql, params object[] parameters) {
return Database.ExecuteSqlCommand(sql,parameters);
}
}
因此,现在依赖类只能使用所需的功能
public class MyController : ODataController {
private readonly IDataContext db;
public MyController(IDataContext db) {
this.db = db;
}
[HttpPost]
[ODataRoute("RunFile()")]
public IHttpActionResult RunFile() {
//..code omitted for brevity
var result = db.SqlQuery<int>("exec MyStoredProc").ToList();
return Ok(result);
}
}