如何在asp.net mvc中编写纯SQL?

时间:2014-01-14 13:39:01

标签: c# asp.net sql entity-framework asp.net-mvc-5

我已经创建了一个控制器类,如下所示:

public class CelebrityController : Controller
{
    private MyDatabase db = new MyDatabase();

    public ActionResult Index()
    {
        var query = db.tableCelebrity.Include(t => t.tableMovie);
        return View(query.ToList());
    }
}

现在我想做同样的事情,但在Index方法中使用纯SQL查询。 我正在尝试替换代码如下:

public class CelebrityController : Controller
    {
        private MyDatabase db = new MyDatabase();

        public ActionResult Index()
        {
            IEnumerable<tableCelebrity> results = db.ExecuteQuery<tableCelebrity>
            (@"SELECT c1.celebid as CelebrityID, t1.movieName as MovieName
                FROM tableCelebrity as c1, tableMovie as t1
                WHERE c1.celebid = t1.celebid");
        }
    }

但这会在db.ExecuteQuery<tableCelebrity>行显示错误:

  

错误'MyProject.Models.MyDatabase'不包含的定义   'ExecuteQuery'并没有扩展方法'ExecuteQuery'接受一个   可以找到类型为“MyProject.Models.MyDatabase”的第一个参数

ASP.NET MVC有可能吗?如果是,那么我必须在方法中执行哪些更改?

请帮我这样做。

I am created Details method as below

public ActionResult ShortDetails(int? id, string tagname)
    {
        tblCelebrity tblcelebrity = db.tblCelebrities.SqlQuery<tblCelebrity>("SELECT * FROM dbo.tblCelebrity WHERE Celebrity_ID =" + id);

        if (tblcelebrity == null)
        {
            return HttpNotFound();
        }
        return View(tblcelebrity);
    }

详细信息查看接受类型为

@model MyProject.Models.tblCelebrity

我还在我的项目中创建了tblCelebrity类

但是`tblCelebrity tblcelebrity = db.tblCelebrities.SqlQuery(“SELECT * FROM dbo.tblCelebrity WHERE Celebrity_ID =”+ id); 这一行给出了错误 非泛型方法'System.Data.Entity.DbSet.SqlQuery(string,params object [])'不能与类型参数一起使用

2 个答案:

答案 0 :(得分:12)

你想要类似的东西:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}

您可以在此处找到相关教程: http://msdn.microsoft.com/en-us/data/jj592907.aspx

答案 1 :(得分:0)

当我之前收到错误时,原因是连接字符串中的用户没有对DB的执行权限。一旦我使用了具有权限的用户,或者在查询中使用了“GRANT EXECUTION”语句,一切都得到了很好的解决。