2014-01-14 4 views
5

Я создал класс контроллера, как показано ниже:Как написать чистый SQL в asp.net mvc?

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

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

Теперь я хочу сделать то же самое, но с использованием чистого SQL запроса в методе Index. Я пытаюсь заменить код, как показано ниже:

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>:

Error «MyProject.Models.MyDatabase» не содержит определения для ' ExecuteQuery»и не метод расширения„ExecuteQuery“приняв первый аргумент типа„MyProject.Models.MyDatabase“можно найти

Является ли это possib с 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 (строка Params Object [])» не может быть использован с аргументами типа

+1

Mvc не имеет никакого отношения ни к какой базе данных, которую вы выбрали для вас. – asawyer

+0

У вас, вероятно, нет System.Linq сверху –

+0

Используйте микро-Orm, они именно то, что вы хотите. Dapper.net, SqlFu, PetaPoco, ServiceStack.OrmLite и т. Д. Но вы не хотите запрашивать db в контроллере. Создайте для этого как минимум репозиторий. – MikeSW

ответ

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

+0

Как минимум, включите соответствующие фрагменты кода из ссылки для потомков - ссылки в качестве ответов здесь не совсем приемлемы. –

+0

сэр, пожалуйста, см. Мое редактирование сейчас. – user3194155

+0

да ... его рабочий. Спасибо вам, sir – user3194155

0

Когда я получил ошибку ранее, это произошло потому, что пользователь в строке соединения не имеют разрешения на выполнение БД. Как только я использовал пользователя, у которого были разрешения, или использовал инструкцию «GRANT EXECUTION» в запросе, все было исправлено.

Смежные вопросы