SQL Server Değer Oluşturma
Bu sayfada, SQL Server sağlayıcısına özgü değer oluşturma yapılandırması ve desenleri ayrıntılı olarak açıklanıyor. İlk olarak değer oluşturmayla ilgili genel sayfayı okuması önerilir.
KIMLIK sütunları
Kural gereği, değerleri ekleme sırasında oluşturulacak şekilde yapılandırılmış sayısal sütunlar SQL Server IDENTITY sütunları olarak ayarlanır.
Tohum ve artış
Varsayılan olarak, KIMLIK sütunları 1'de (çekirdek) başlar ve her satır eklendiğinde (artış) 1 artar. Aşağıdaki gibi farklı bir tohum ve artış yapılandırabilirsiniz:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.BlogId)
.UseIdentityColumn(seed: 10, increment: 10);
}
IDENTITY sütunlarına açık değerler ekleme
Varsayılan olarak, SQL Server IDENTITY sütunlarına açık değerler eklenmesine izin vermez. Bunu yapmak için, çağırmadan SaveChanges()
önce aşağıdaki gibi el ile etkinleştirmeniz IDENTITY_INSERT
gerekir:
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" });
context.Database.OpenConnection();
try
{
context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Blogs ON");
context.SaveChanges();
context.Database.ExecuteSqlRaw("SET IDENTITY_INSERT dbo.Blogs OFF");
}
finally
{
context.Database.CloseConnection();
}
}
Dekont
Bunu SQL Server sağlayıcısında otomatik olarak yapmak için kapsamımızda bir özellik isteği var.
Sıralar
IDENTITY sütunlarına alternatif olarak, standart dizileri kullanabilirsiniz. Bu, çeşitli senaryolarda yararlı olabilir; örneğin, birden çok sütunun varsayılan değerlerini tek bir diziden çizmesini isteyebilirsiniz.
SQL Server, diziler oluşturmanıza ve bunları dizilerin genel sayfasında ayrıntılı olarak kullanmanıza olanak tanır. aracılığıyla HasDefaultValueSql()
dizileri kullanmak üzere özelliklerinizi yapılandırmak size bağlı.
Guıd
GUID birincil anahtarları için sağlayıcı, SQL Server'ın NEWSEQUENTIALID işlevine benzer en uygun sıralı değerleri otomatik olarak oluşturur. İstemcide değer oluşturmak bazı senaryolarda daha verimlidir; başka bir deyişle, bu anahtara başvuran bir bağımlı da eklendiğinde, veritabanı tarafından oluşturulan değeri almak için fazladan bir veritabanı gidiş dönüşe gerek yoktur.
EF'nin anahtar olmayan özellikler için aynı sıralı GUID değerlerini oluşturmasını sağlamak için bunları aşağıdaki gibi yapılandırın:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().Property(b => b.Guid).HasValueGenerator(typeof(SequentialGuidValueGenerator));
}
Rowversions
SQL Server, satır her güncelleştirildiğinde otomatik olarak değişen veri türüne sahiptir rowversion
. Bu, aynı satırın aynı anda birden çok işlem tarafından güncelleştirildiği durumları yönetmek için eşzamanlılık belirteci olarak çok kullanışlı hale getirir.
Eşzamanlılık belirteçlerini ve bunların nasıl kullanılacağını tam olarak anlamak için eşzamanlılık çakışmalarıyla ilgili ayrılmış sayfayı okuyun. Bir byte[]
özelliği bir rowversion
sütuna eşlemek için aşağıdaki gibi yapılandırın:
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Timestamp]
public byte[] Version { get; set; }
}