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ă.
|