Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 30236|Răspunde: 1

[Sursă] EF setează ID-ul cheii primare pentru tipul guid auto-crescător

[Copiază linkul]
Postat pe 04.11.2016 13:27:38 | | | |


Codul entității entității este următorul:



Codul de inserare este următorul:



Noi setăm doar valoarea numelui și nu atribuim o valoare lui id, să vedem ce este instrucțiunea SQL generată??? , după cum urmează:

exec: sp_executesql N'DECLARE @generated_keys table([Id] unic identificator)
INSERAȚI [dbo]. [TestTab] ([Nume])
OUTPUT inserat. [Id] ÎN @generated_keys
VALORI (@0)
SELECT t.[Id]
DE @generated_keys CA G JOIN [dbo]. [TestTab] AS t ON g.[Id] = t.[Id]
UNDE @@ROWCOUNT > 0',N'@0 nvarchar(32)', @0=N' arhitectwww.itsvse.com'


Am descoperit că tabelul INSERT TestTab inserează doar câmpul Nume, are Id o valoare implicită??? Am găsit că

ef m-a ajutat să setez tipul implicit de valoare al cheii primare Id, valoarea implicită a legării "(newsequentialid())" și a folosit funcția newsequentialid(), introdusă astfel:


1.:Cel mai mare avantaj al funcției newsequentialid față de funcția newid este că, dacă creezi un index pe un câmp UNIQUEIDENTIFIER, noua valoare generată folosind newid nu este fixă, astfel că noua valoare face ca schimbarea arborelui de indice B+ să fie aleatorie. Dacă noua valoare produsă de newsequentialid este regulată, atunci schimbarea arborelui de indice B+ este regulată. Regularitatea și neregularitatea duc la îmbunătățiri ale performanței.

2: UNIQUEIDENTIFIER este un lucru foarte convenabil de făcut ca cheie primară, care are avantaje de neînlocuit în operațiuni precum fuziunea datelor
Totuși, din cauza descentralizării GUID-urilor obișnuite, dacă cheia primară este adăugată într-un index clusterizat, va fi mult mai puțin eficientă la inserarea înregistrărilor

SQL SERVER 2005 adaugă o nouă funcție numită NEWSEQUENTIALID, pe care MSDN o explică:
Creează un GUID pe mașina specificată care este mai mare decât orice GUID generat anterior de funcție.
NEWSEQUENTIALID() nu poate fi referențiat în interogare.
Notă: Aceasta înseamnă că poate fi folosit doar ca VALOARE IMPLICITĂ a unei coloane de baze de date și nu poate executa instrucțiuni precum SELECT NEWSEQUENTIALID().
GUID-ul generat de NEWSEQUENTIALID() este unic în acel calculator doar dacă acesta nu are o placă de rețea.
Notă: Această propoziție este greșită, ar trebui să fie că doar atunci când calculatorul are o placă de rețea, GUID generat este unic în lume
Poți folosi NEWSEQUENTIALID() pentru a genera un GUID care să reducă contenția paginilor pe indexul la nivel de frunză.





Precedent:EasyUI Control Tab adaugă o funcție de comutare
Următor:c#/.Net Collection array layer by layer value
Postat pe 01.02.2018 10:43:26 |
Da, mulțumesc! Abilitățile proprietarului sunt foarte grele! Greu
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com