2014-12-26 117 views
1

我有一個現有的存儲過程來插入數據。同樣的SP我想在插入值後返回一個int值。返回值基於EF代碼優先

我的問題是,如何編寫與EF代碼相關的C#代碼?

返回是數字0或1的插入件的值是「a」或「B」

回答

2

可以使用SqlQuery

using (var context = new MyContext()) 
{ 
    var input = "a"; 
    var result = context.Database.SqlQuery<int>("dbo.MyProc @param",  
               new SqlParameter("@param", input)) 
         .FirstOrDefault(); 
    // use result 
} 

@param是輸入的名稱執行任意查詢和特效param('a','b')給你的SPROC,<int>是結果的類型參數。您也可以綁定以相同方式返回的實體。我們已經參數input避免SQL注入問題

var result = context.Database.SqlQuery<int>("dbo.MyProc @param",  
              new SqlParameter("@param", input)) 
        .FirstOrDefault(); 

編輯,重新學生從存儲過程返回

與簡單的整數標量,Students聲音就像在你的EF型號一流的實體,並應該創建爲DbSets - 這樣你就可以使用LINQ翻譯到Sql的所有功能。

但是,是的,如果你有一個PROC這已經爲你做過濾,你可以使用:

var students = context.Database.SqlQuery<Student>("dbo.MyProc @param",  
              new SqlParameter("@param", input))) 
         .ToList() 

這將匹配匹配Student性質所有列和約束他們。 或者,如果Student已經是一個DbSet<>的實體,有一個DbSet.SqlQuery過載:

var students = context.Students.SqlQuery("dbo.MyProc @param",  
              new SqlParameter("@param", input))) 
         .ToList() 
+0

謝謝您的幫助!如果我需要檢索大量數據「列表 SStudent = ....」,寫它還是需要做更多? – KLN

+0

@KLN你是否回覆了錯誤的東西?你的原始問題或這個答案都不與學生有任何關係。 –

+0

@KLN學生聽起來像EF模型中的一流實體,應該創建爲「DbSets」 - 這樣您就可以將LINQ轉換的所有功能用於Sql。但是,是的,如果你有一個已經爲你過濾的PROC,你可以替換'result = context.Database.SqlQuery (...)'或'result = context.Students.SqlQuery(...)'if學生已經是一個擁有'DbSet <>'的實體。 – StuartLC