2011-07-01 112 views
1

我試圖使用GetObjectByKey功能像這樣得到一個記錄:實體框架 - GetObjectByKey不允許主鍵

Enumerable<KeyValuePair<string, object>> entityKeyValues = 
       new KeyValuePair<string, object>[] { 
       new KeyValuePair<string, object>("JournalId", 
            new Guid("6491305f-91d9-4002-8c47-8ad1a870cb11")) }; 

EntityKey key = new System.Data.EntityKey(string.Format("{0}.{1}", ObjectContextManager.Current.DefaultContainerName, "Journal"), entityKeyValues); 

,但我得到這個異常

System.ArgumentException:提供的鍵值對 的列表包含不正確的條目數。在'Namespace.Journal'類型上定義了54個關鍵字段 ,但提供了1個。參數 名稱:鑰匙

類型日誌是一個視圖。

我該如何使用該功能只有一個字段,爲什麼我需要這是因爲我不想指定一個泛型類型,只是從給定的實體集名稱中獲取它。

在此先感謝

+0

「定義了54個關鍵字段」檢查你的模型;它聽起來像它認爲整個表是關鍵,即每個字段 –

+0

我認爲這樣做是因爲數據庫視圖不是表,但另一方面,我創建了視圖WITH VIEW_METADATA。 – brittongr

回答

1

查看數據庫中沒有一個關鍵,但EF需要它,所以當你插入視圖模型EF將採取一切非空的,非二進制列,將它們定義爲鑰匙 - 目前您的鑰匙由54列組成。該解決方案是手動修改EDMX文件(如XML),但使用默認的EDMX設計器,每次從數據庫更新後,您的更改都將被刪除。

+0

這對我來說是一個問題,因爲我有一個數據庫視圖添加到模型中,並且有很多。 – brittongr