6

我試圖理解爲什麼新的ASP.NET身份表使用Guid(唯一標識符型)作爲停止鍵 - 而不是它現在使用nvarchar(128),但仍然保持了Guidstring ...爲什麼新的ASP.NET標識錶停止使用Guid(uniqueidentifier類型)作爲關鍵字?

是不是這是一個巨大的浪費? (uniqueidentifier僅有2 integers VS整個Guid爲36字符string

我懷疑實體框架可能是負責這...

它是安全的變回唯一標識符鍵?

誰能告訴我使用36個字符串有什麼好處?

+0

'uniqueidentifier'是16個字節,而不是8個。字符串的大小並不取決於它的長度,所以它實際上總是256個字節(nvarchar每個「字符」有兩個字節),並且相同任何指數和協會。我想目標是靈活性,但它似乎對我來說是一個可憐的交易... – Luaan

+0

謝謝,由於某種原因,我有Guid = 2 int卡在我的頭......但我認爲新的SQL服務器只分配使用nvarchar字符的數量,如果只使用了36個,則不會花費全部128個字符 - 但仍然是一大浪費... – Yovav

+0

我知道它使用'nvarchar(max)'來做到這一點(甚至還有一個最小長度的IIRC)和類似的,我還沒有探討它是如何工作,否則。他們有可能解決所有這些問題,但是我們不是簡單地在每個地方都使用'nvarchar(max)'? :D – Luaan

回答

1

標識可以在多個存儲平臺上運行,而不是每個存儲平臺都具有Guid作爲受支持的存儲類型。

您可以將默認字符串pkey更改爲Guid,但涉及到C#模型的一些工作。或者您可以將pkey更改爲int - 無論您喜歡什麼。請注意,有大量的debatewhichbetter

+0

謝謝。我懷疑除了支持其他SQL平臺之外,是否有更多合理的理由來使用128 nvarchar ......我曾經是Entity Framework的忠實粉絲,但似乎他們移動得太快而沒有關閉所有的端點......這個那種性能打擊是不可接受的...... – Yovav

+0

那麼,EF可以在這些平臺上模擬GUID,但爲什麼它在任何地方都那樣?這聽起來像是EF提供的抽象應該處理的事情之一。 – Luaan

+0

@Luaan你是什麼意思「像那樣到處做」?如果你在你的存儲類中創建了一個'Guid'屬性並且告訴EF可以使用它,它將在SQL Server中創建一個'UNIQUEIDENTIFIER'字段。將Guid存儲爲字符串是Identity框架的一種選擇。 – trailmax

相關問題