目前,EF對存儲過程的支持並不完善。存在以下問題:
l EF不支持存儲過程返回多表聯合查詢的結果集。
l EF僅支持返回返回某個表的全部字段,以便轉換成對應的實體。無法支持返回部分字段的情況。
l 雖然可以正常導入返回標量值的存儲過程,但是卻沒有為我們自動生成相應的實體.cs代碼,我們還是無法在代碼中直接調用或使用標量存儲過程
l EF不能直接支持存儲過程中Output類型的參數。
l 其他一些問題。
下面,主要針對如何使用存儲過程,以及存儲返回實體、表的部分字段這個幾個問題,做具體介紹。
l 導入存儲過程及返回實體
在VS可視化設計器中,打開實體模型(emdx文件)。然後,鼠標右鍵點擊“Customers”à “添加”à“函數導入”,然後選擇“存儲過程名稱”,並輸入函數導入名稱,選擇返回類型為實體並選擇Customers。如下圖所示:
之後,點擊“確定”。之後,存儲過程導入。在代碼我們就可以使用改存儲過程了。如下代碼所示:
[Test]
public void GetEntityBySP()
{
using (var db = new NorthwindEntities())
{
var cst = db.GetCustomerById("ALFKI").FirstOrDefault();
Assert.IsNotNull (cst);
Console.WriteLine("CustomerId:{0},ContactName:{1}", cst.CustomerID, cst.ContactName);
}
}