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. Öncelikle değer oluşturmayla ilgili genel sayfayıokumanız önerilir.
Kimlik sütunları
Genel olarak, ekleme sırasında değerlerinin oluşturulması için yapılandırılan sayısal sütunlar
Tohum ve artış
Varsayılan olarak, KIMLIK sütunları 1'den (başlangıç) 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, SaveChangesAsync()
çağırmadan önce IDENTITY_INSERT
el ile etkinleştirmeniz 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" });
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();
}
}
Not
Bunu SQL Server sağlayıcısında otomatik olarak yapmak için kapsamımızda bir
Dizi
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ı dizilerle ilgili genel sayfadabelirtildiği şekilde kullanmanıza olanak tanır. özelliklerinizi HasDefaultValueSql()
aracılığıyla dizileri kullanacak şekilde yapılandırmak size bağlı.
GUIDs
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. Müşteride değer üretmek bazı senaryolarda daha verimlidir; yani, bu anahtara referans veren bir bağımlı da eklendiğinde, veritabanı tarafından üretilen değeri almak için ek bir veritabanı gidiş dönüşüne ihtiyaç 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 rowversion
veri türüne sahiptir. 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ı hakkındayazılan özel sayfaya göz atın. bir byte[]
özelliğini bir rowversion
sütununa 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; }
}