我也有類似的情況曾經,我的問題是與存儲過程中的數據庫B(我必須通過鏈接服務器訪問該對象在我的中央數據庫,姑且稱之爲數據庫答:這是不可能的地圖數據庫B由於少數公司政策),當使用數據庫優先方法時,EF 6不允許您將此存儲過程映射到您的EDMX文件中,所以我想出了一種欺騙實體框架的方法。
這很簡單,我只是在數據庫A增加了一個SQL同義詞,這個對象指向視圖/存儲過程/表在數據庫B(見附圖)
當然,我創建的代名詞在我的情況在數據庫B中的存儲過程,然後在方法執行我喜歡這個存儲過程:
SqlParameter paramNumber1 = new SqlParameter("@firstParameter", someVariable);
//We need to create a class for the Synonym result, which origin is: [Server].[Database].[dbo].[RemoteStoredProcedure]
var result = ctx.Database.SqlQuery<classForTheSPResult>("RemoteStoredProcedure @firstParameter", paramNumber1).ToList();
如果採取這種方法,你可以從你的代名詞查看執行原始SQL查詢。 For further information, check some the MSDN site,查詢將如下所示:
using (var context = new BloggingContext())
{
var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}
我希望我的意見對我有幫助。
你能否更清楚地陳述問題。視圖中生成的對象是否沒有PK屬性?鏈接的服務器與此有關嗎?我相信對於缺少PK問題的觀點有一些解決方法。 –
嗨Nick.McDermaid,是的,對象沒有PK,沒有導航屬性。你能帶我去一個導遊嗎? – khoailang
這裏是如何欺騙EF以爲你的觀點PK了一個解釋:http://stackoverflow.com/questions/1013333/entity-framework-and-sql-server-view。接受的答案是一個解決方法。再往下看,它解釋瞭如何在不破壞視圖的情況下實現它。 –