2017-02-23 62 views
0

我有一箇舊數據庫,我正在使用實體框架進行接口連接。我不能更改模式,因爲它正在被另一個(非常舊的)應用程序使用,如果不允許爲應該是PK的列插入自己的值,它將會崩潰。通過實體框架爲傳統表插入主鍵

這些表沒有設置主鍵約束,因此沒有可用的標識。他們設置爲EF設計器中的實體鍵雖然(不代碼優先)。選擇效果很好,但插入失敗,因爲它無法弄清楚主鍵的值應該是多少。我試着將StoreGeneratedPattern設置爲none,computedidentity但他們都沒有工作。

VS 2013,EF 6我覺得(真的不知道如何檢查,因爲ADO.net Entity Data Model項目沒有指定)

+0

那麼,你必須自己提供一個PK值。 'DatabaseGeneratedOption'在這裏不適用,因爲數據庫不會生成任何東西。 –

+1

此表中的任何列是否適合「假」主鍵?也就是說,它包含了獨特的價值?如果是這樣,您可以誘使EF將該列用作主鍵,我可以回答這個問題。 – Amy

+0

您是否考慮過使用存儲過程而不是EF插入? – HLGEM

回答

0

不是最酷的答案,但還是會工作:將ID設置爲GUID數據中的新插入的訪問層。如果你不得不訴諸假冒PK,那麼儘管表現比正常的身份更差,但這仍然至少與PK哲學一致。

下面是一些重要的提示,儘管他們可能不是超級有益的,如果你不能對數據庫進行任何更改:

What are the best practices for using a GUID as a primary key, specifically regarding performance?

有時你必須做壞事做舊的東西的工作。 : -/

+0

我不認爲這會起作用,因爲傳統軟件會在pk列中看到GUID,或者如果GUID作爲額外列插入,則會看到空pk。還是)感謝你的建議! – Zorgarath