Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ez a lap az SQL Server-szolgáltatóra jellemző értékgenerálási konfigurációt és mintákat ismerteti. Javasoljuk, hogy először olvassa el az értékgenerálásról szóló általános oldalt.
IDENTITÁSoszlopok
Általában azok a numerikus oszlopok, amelyeket úgy konfigurálnak, hogy értékeik hozzáadáskor automatikusan generálódjanak, SQL Server IDENTITY-oszlopokkáválnak.
Mag és növekmény
Az IDENTITY-oszlopok alapértelmezés szerint 1-nél (a magnál) indulnak el, és minden sor hozzáadásakor 1-zel növekszik (a növekmény). Az alábbiak szerint konfigurálhat egy másik alapértéket és növekményt:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.BlogId)
.UseIdentityColumn(seed: 10, increment: 10);
}
Explicit értékek beszúrása identitásoszlopokba
Alapértelmezés szerint az SQL Server nem engedélyezi explicit értékek beszúrását az IDENTITÁSoszlopokba. Ehhez manuálisan kell engedélyeznie a IDENTITY_INSERT, mielőtt meghívja SaveChangesAsync(), az alábbiak szerint:
using (var context = new ExplicitIdentityValuesContext())
{
context.Blogs.Add(new Blog { BlogId = 100, Url = "http://blog1.somesite.com" });
context.Blogs.Add(new Blog { BlogId = 101, Url = "http://blog2.somesite.com" });
await context.Database.OpenConnectionAsync();
try
{
await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.Blogs ON");
await context.SaveChangesAsync();
await context.Database.ExecuteSqlRawAsync("SET IDENTITY_INSERT dbo.Blogs OFF");
}
finally
{
await context.Database.CloseConnectionAsync();
}
}
Jegyzet
Van egy funkciókérésünk, a teendőnaplónkban, hogy ezt automatikusan elvégezzük az SQL Server-szolgáltatón belül.
Szekvenciák
Az IDENTITÁSoszlopok alternatívaként szabványos sorozatokat is használhat. Ez különböző helyzetekben lehet hasznos; Előfordulhat például, hogy több oszlop is egyetlen sorozatból rajzolja meg az alapértelmezett értékeket.
Az SQL Server lehetővé teszi a sorozatok létrehozását és használatát, ahogy az a sorozatok általános oldalán részletesen ismertetve van . Önön múlik, hogy a tulajdonságokat úgy konfigurálja, hogy sorrendeket használjon a HasDefaultValueSql()segítségével.
Guid
A GUID elsődleges kulcsok esetében a szolgáltató automatikusan optimális szekvenciális értékeket hoz létre, hasonlóan az SQL Server NEWSEQUENTIALID függvényéhez. Az érték generálása az ügyféloldalon bizonyos esetekben hatékonyabb, azaz nincs szükség újabb adatbázis-hozzáférésre az adatbázis által generált érték lekéréséhez, amikor egy kapcsolt rekordot is beillesztenek, ami erre a kulcsra hivatkozik.
Ha azt szeretné, hogy az EF ugyanazokat a szekvenciális GUID-értékeket hozza létre a nem kulcstulajdonságokhoz, konfigurálja őket az alábbiak szerint:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().Property(b => b.Guid).HasValueGenerator(typeof(SequentialGuidValueGenerator));
}
Rowversions
Az SQL Server rowversion adattípussal rendelkezik, amely a sor frissítésekor automatikusan megváltozik. Ez nagyon hasznos egyidejűségi tokenként az olyan esetek kezeléséhez, amikor ugyanazt a sort egyszerre több tranzakció is frissíti.
Az egyidejűségi jogkivonatok teljes megértéséhez és használatuk módjához olvassa el a dedikált oldalt egyidejűségi ütközésekről. Ha egy byte[] tulajdonságot egy rowversion oszlopra szeretne leképezni, konfigurálja az alábbiak szerint:
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Timestamp]
public byte[] Version { get; set; }
}