2014-01-14 28 views
5

我創建瞭如下一個控制器類:如何在asp.net mvc中編寫純SQL?

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’可以發現

是否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對象[])」不能與類型參數一起使用

+1

Mvc與您選擇的任何數據庫框架無關。 – asawyer

+0

您可能沒有在頂部使用System.Linq –

+0

使用微型Orm,它們正是您想要的。 Dapper.net,SqlFu,PetaPoco,ServiceStack.OrmLite等。但你不想在控制器中查詢數據庫。爲此創建至少一個存儲庫。 – 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

是啊...它的工作。謝謝你先生 – user3194155

0

當我以前收到的錯誤,這是因爲在連接字符串中的用戶並沒有執行對DB的權限。一旦我使用了具有權限的用戶,或者在查詢中使用了「GRANT EXECUTION」語句,所有內容都可以完美解決。