2017-05-01 259 views
-2

私の接続文字列:はどのようにASP。ネットMVCウェブAPIでSQL生のクエリを使用するには

<add name="addConnection" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\FLWorkDB.mdf" providerName="System.Data.SqlClient" /> 
<add name="FLWorkDBEntities" connectionString="metadata=res://*/MyEdmx.csdl|res://*/MyEdmx.ssdl|res://*/MyEdmx.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\FLWorkDB.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

マイウェブAPI:

[HttpGet] 
    [Route("api/JobApi/BrowseJobs/")] 
    public object BrowseJobs() 
    { 



     using (var ctx = new FLWorkDBEntities()) 
     { 
      //Get student name of string type 
      object studentName = ctx.Database.SqlQuery<string>(@"Select j.JobID,j.JobDetails,j.JobTitle, j.Deadline ,j.Budget,j.Category, emp.FirstName,emp.LastName,Skills = Stuff((Select ',' +SkillName From Skill Where charindex(concat(',',SkillID,','),','+j.ReqSkill+',')>0 For XML Path ('')),1,1,'') 
         From Job j 
         join Employeer emp on j.EmployeerID = emp.EmployeerID 
         WHERE NOT EXISTS 
          (SELECT * 
          FROM ClosedJob c 
          WHERE c.JobID = j.JobID) AND 

         NOT EXISTS 
          (SELECT * 
          FROM AppliedJob apj 
          join JobOffer jo on apj.AppliedJobID =jo.AppliedJobID 
          join Contract con on jo.OfferID =con.OfferID 
          WHERE con.CompletedDate != Null)").ToList(); 


     } 

     return stu 




    } 

は、今私はLINQですべてをやっています。しかし、私はLINQを回避し、直接SQLクエリを追加したい。

RAW SQL:"Select * from A where A.ID =2"

(参加と)私は、JSONでリストを返す私のWeb APIのRAW SQLクエリを追加します。 エンティティフレームワークなしでsqlクエリを追加できますか。.edmxファイルですか? ========

Self referencing loop detected with type 'System.Data.Entity.DynamicProxie 

var results = db.Database.SqlQuery<FLWorkDBEntities>(@"Select j.JobID,j.JobDetails,j.JobTitle, j.Deadline ,j.Budget,j.Category, emp.FirstName,emp.LastName,Skills = Stuff((Select ',' +SkillName 
           From Skill 
           Where charindex(concat(',',SkillID,','),','+j.ReqSkill+',')>0 
           For XML Path ('')),1,1,'') 
        From Job j 
        join Employeer emp on j.EmployeerID = emp.EmployeerID 
        WHERE NOT EXISTS 
         (SELECT * 
         FROM ClosedJob c 
         WHERE c.JobID = j.JobID) AND 

        NOT EXISTS 
         (SELECT * 
         FROM AppliedJob apj 
         join JobOffer jo on apj.AppliedJobID =jo.AppliedJobID 
         join Contract con on jo.OfferID =con.OfferID 
         WHERE con.CompletedDate != Null)").ToList<FLWorkDBEntities>(); 

     return JsonConvert.SerializeObject(results); 

しかしリターン:

編集 ============== はこれを試してみました======== 解決済み ================== ストアドプロシージャ(BrowseJobs)を作成し、次のコードで添付しました

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["addConnection"].ConnectionString); 
     SqlCommand com = new SqlCommand("BrowseJobs", con); 
     com.CommandType = CommandType.StoredProcedure; 
     SqlDataAdapter da = new SqlDataAdapter(com); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     return ds.Tables[0]; 
+0

何のバージョンは、使用して? – Ashiquzzaman

+0

私は別の方法で解決しましたが、4.5 – Fawel

+0

かもしれませんが、VS 2013を知らないでください! – Fawel

答えて

1

はい。あなたはこのリンクを通過することができますhttp://www.entityframeworktutorial.net/EntityFramework4.3/raw-sql-query-in-entity-framework.aspx

など。

using (var context = new SqlDbContext()) 
{ 
    //Get command for non entity types 
    string studentName = context.Database.SqlQuery<string>(@"SELECT StudentName FROM Student WHERE StudentID = 1").FirstOrDefault<string>(); 

    //Get command for entity types. SQL columns returned by SQL query should match the property of the entity type 
    var students = context.Students.SqlQuery(@"SELECT * FROM Student").ToList<Student>(); 

    //Update command 
    int noOfRowsUpdated = context.Database.ExecuteSqlCommand(@"UPDATE Student SET StudentName = 'New Name' WHERE StudentID = 1"); 

    //Insert command 
    int noOfRowsInserted = context.Database.ExecuteSqlCommand(@"INSERT INTO Student(StudentName) VALUES('New Student')"); 

    //Delete command 
    int noOfRowsDeleted = context.Database.ExecuteSqlCommand(@"DELETE FROM Student WHERE StudentID = 1"); 
} 

Newtonsoft.Jsonを使用してJSON形式でリストを返すことができます。ただ、次の手順を実行します。EFの

  1. PM> Install-Package Newtonsoft.Json
  2. using Newtonsoft.Json;
  3. var jsonResult = JsonConvert.SerializeObject(students);
+0

jsonでリストを返すにはどうしたらいいですか? @Reyan Chougle – Fawel

+0

あなたはNewtonsoft.Jsonを使う必要があります。あなたはこれをチェックすることができますhttp://stackoverflow.com/questions/6366118/converting-list-to-json-format-quick-and-easy-way –

+0

これは良い投稿です。 http://stackoverflow.com/questions/9110724/serializing-a-list-to-json –

関連する問題