Aracılığıyla paylaş


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ütunlarSQL Server IDENTITY sütunları olarak yapılandırılır.

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 özellik isteğimiz var.

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; }
}