2016-07-06 77 views
1

我正在使用實體框架調用存儲過程。使用實體框架讀取存儲過程的非鍵入結果

當我調用存儲過程返回從表中設置的結果,它的工作原理:

var user= context.Database.SqlQuery<User>("get_My_User, @Name, @Mail", 
      new SqlParameter("@Name", 'Maurice'), 
      new SqlParameter("@Mail", '[email protected]') 
      ).FirstOrDefault(); 

不幸的是,當我打電話用的結果集是不是表的存儲過程,我不能得到任何結果。

這種嘗試總是返回-1:

var result = context.Database.ExecuteSqlCommand("my_stored_procedure @Param1, @Param2", 
new SqlParameter("@Param1", "value1"), 
new SqlParameter("@Param2", "value2")); 

這其他的嘗試返回null對象的列表:

var generatedDesignations = context.Database.SqlQuery<Object>(
     "my_stored_procedure @Param1, @Param2", 
    new SqlParameter("@Param1", "value1"), 
    new SqlParameter("@Param2", "value2")).ToList(); 

你知道如何做到這一點?

+0

當你說的「這是來自多個表的結果」,你的意思是一個存儲過程返回多個數據集? – kamilk

+0

不,我只是從不同的表 –

+0

爲什麼使用實體框架呢?對於Dapper來說似乎是一個完美的用例。 –

回答

1

我不知道使用SqlQuery和ExecuteSqlComman methods.Bu我可以以另一種方式推薦。 如果你在VS的服務器資源管理器中定義存儲過程,它的使用更容易。你可以用它作爲方法。爲了定義它;
1)打開服務器瀏覽器,
2)查找數據連接的存儲過程。
3)右鍵單擊並添加寫入存儲過程。
4)更新它。
5)更新EDMX
6)使用存儲過程context.StoredProcedureName(paramters)