共用方式為


SQL Server 值產生

此頁面詳細說明 SQL Server 提供者特有的值產生組態和模式。 建議您先閱讀 產生值的 一般頁面。

IDENTITY 資料行

依照慣例,設定為在加入時產生其值的數值資料行會設定為 SQL Server IDENTITY 資料行

種子和增量

根據預設,IDENTITY 資料行會從 1 開始(種子),並在每次加入資料列時遞增 1(遞增)。 您可以設定不同的種子和遞增,如下所示:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .Property(b => b.BlogId)
        .UseIdentityColumn(seed: 10, increment: 10);
}

將明確值插入 IDENTITY 資料行

根據預設,SQL Server 不允許將明確值插入 IDENTITY 資料行。 若要這樣做,您必須在呼叫 SaveChanges() 之前手動啟用 IDENTITY_INSERT ,如下所示:

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

注意

在我們的待辦項目上有一個在 SQL Server 提供者內自動進行此操作的功能要求

序列

除了 IDENTITY 資料行,您可以使用標準序列。 這在各種案例中很有用;例如,您可能想要讓多個資料行從單一序列繪製其預設值。

SQL Server 可讓您建立序列,並在序列 的一般頁面中詳細說明 它們。 您必須設定屬性,以透過 HasDefaultValueSql() 使用序列。

GUID

針對 GUID 主鍵,提供者會自動產生最佳的循序值,類似于 SQL Server 的 NEWSEQUENTIALID 函式。 在某些情況下,在用戶端上產生值會更有效率,也就是當相依專案也插入參考該索引鍵時,不需要額外的資料庫來回行程來取得資料庫產生的值。

若要讓 EF 為非索引鍵屬性產生相同的循序 GUID 值,請設定它們,如下所示:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>().Property(b => b.Guid).HasValueGenerator(typeof(SequentialGuidValueGenerator));
}

Rowversions

SQL Server 具有 rowversion 資料類型,每當更新資料列時,就會自動變更。 這讓當做並行權杖非常實用,用於管理多個交易同時更新相同資料列的情況。

若要完全瞭解並行權杖及其使用方式,請閱讀並行衝突 專用頁面。 若要將 byte[] 屬性對應至資料 rowversion 行,請依照下列方式進行設定:

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    [Timestamp]
    public byte[] Version { get; set; }
}