2011-03-15 82 views
3

我需要有一個實體具有兩個獨立的候選鍵,其中一個是主鍵,它是代理標識鍵,另一個是替代鍵代表真正的獨特屬性。我需要在我的實體中分別擁有它們。請注意,我並不是指複合鍵或多列鍵。無論如何,我需要在ADO.NET數據模型中的一個實體上有這個。有可能這樣做嗎?如果是,請指導我。ADO.NET數據模型中的替代/候選鍵

擁有第二個關鍵的原因是我需要另一個實體與該關鍵字上的第一個實體有關聯(和外鍵)關係。

更新:我在以下問題中發現了與我非常相似的情況: http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/a248632a-d305-4c15-8e57-6742457cca94 EF v1似乎不支持此功能。有人知道V4(字面上是第二個版本)是否具有此功能?我發現了以下內容,但似乎並未顯示此功能已添加到當前版本的任何線索:http://blogs.msdn.com/b/adonet/archive/2009/05/11/update-on-the-entity-framework-in-net-4-and-visual-studio-2010.aspx

+2

您的問題很不清楚。您似乎有兩個在此表空間上唯一的鍵,其中一個是自動生成的整數序列鍵,另一個是唯一的ID。你希望它們都顯示爲表的主鍵?在這種情況下,不可以,只能選擇一個作爲主鍵。每個表只有一個主鍵。但是你可以在另一列建立一個索引。 – 2011-03-15 03:21:34

+1

@Stephen好的,也許這是因爲我已經在關係數據模型語言中表達了這個問題。我知道你當然只能有一個主鍵。這就是爲什麼我將其他人稱爲關係數據庫語言中的備用關鍵字的原因。它確實是一個獨特的屬性。您可以輕鬆地對任何非主鍵屬性設置此唯一性約束,並將其設置爲「備用鍵」。我只想知道是否有可能從ADO.NET EDM/EDM設計器中產生這種約束?或者如果我直接將它添加到底層表,它是否會識別這個約束? – amirmonshi 2011-03-15 03:32:44

+0

您提到EDM。你在使用實體框架嗎? – 2011-03-15 06:12:32

回答

4

實體框架不支持唯一鍵。在實體模型中,您的第二把鑰匙將與其他鑰匙一樣。您將無法在該密鑰上創建關係,並且EF不會檢查該密鑰的值是否唯一。但是,如果您的模型將基於具有唯一鍵的現有數據庫,則您將在數據庫層上進行此檢查。

英孚團隊暗示支持唯一密鑰,但remains unavailable as of .NET 4.5暗示。

+0

+1感謝您的回答。我還懷疑,應該是這樣的,閱讀我發佈的鏈接。順便說一句,你有什麼想法爲什麼人們低估了我的問題?這是不好的?!:)) – amirmonshi 2011-03-15 06:45:47

+0

我不知道爲什麼有人低估了你。 – 2011-03-15 07:53:51

+0

已投票的問題。對主鍵和代理鍵的EF支持是一個相關的主題。數據庫支持備用唯一索引上的外鍵約束,因此EF最終識別這些關係是有意義的。 – Technobabble 2013-03-29 18:45:16

0

如果你使用Code First和流利的API,創建兩個單獨的DbContexts可能是一個很好的解決方案。您可以爲要在導航屬性中使用的每個鍵編寫單獨的EntityTypeConfiguration類。我們也在我們的項目中遇到了這個問題,並且我寫了一篇描述我們解決方案的博客文章:http://mmilleruva.blogspot.com/2013/10/working-with-legacy-database-schemas.html

+0

如果您的唯一鍵有執行實體拆分的表的外鍵,那該怎麼辦? – 2014-07-28 09:18:17