2014-01-14 7 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でle?はいの場合、このメソッドでどのような変更を行う必要がありますか?

それを行うために私を助けてください。

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); 
    } 

そして、私はまた、私のプロジェクトでtblCelebrityクラスを作成し

@model MyProject.Models.tblCelebrity 

として詳細ビュー受諾タイプ

しかし `tblCelebrity tblcelebrity = db.tblCelebrities.SqlQuery(" dbo.tblCelebrity SELECT * FROM WHERE Celebrity_ID = "+ id); この行が としてエラーを与える非ジェネリックメソッド「System.Data.Entity.DbSet.SqlQuery(文字列、のparams []オブジェクトは)」あなたはこれに似た何かをしたい

+1

MVCはあなたに選ぶものは何でもデータベースフレームワークとは何の関係もありません。 – asawyer

+0

おそらくマイクロORMを使用して、トップ –

+0

にSystem.Linqのを使用していない、彼らは正確に何をしたいです。 Dapper.net、SqlFu、PetaPoco、ServiceStack.OrmLiteなどがありますが、コントローラのDBに問い合わせる必要はありません。少なくともそのリポジトリを作成します。 – MikeSW

答えて

12

型の引数で使用することはできません。

あなたがここにそのためのチュートリアルを見つけることができます
using (var context = new BloggingContext()) 
{ 
    var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList(); 
} 

:接続文字列でユーザーがDB上で実行権限を持っていなかったので、私は以前にエラーを受け取ったとき http://msdn.microsoft.com/en-us/data/jj592907.aspx

+0

は後世のリンクから、関連するコードスニペットが含まれています。私が使用しているとき –

+0

先生、私の編集を参照してください。今.. – user3194155

+0

ええ...そのworking.thankあなたの先生 – user3194155

0

は、それがでした。権限を持つユーザーを使用したり、クエリに「GRANT EXECUTION」ステートメントを使用すると、すべてが完全に解決されました。

関連する問題