DatabaseGenerated 屬性

指定資料庫如何為屬性生成值。有三個可能的值:

  1. None 指定資料庫不生成值。
  2. Identity 指定該列是標識列 ,通常用於整數主鍵。
  3. Computed 指定資料庫生成列的值。

如果該值不是 None,則 Entity Framework 不會將對該屬性所做的更改提交回資料庫。

預設情況下(基於 StoreGeneratedIdentityKeyConvention ),整數鍵屬性將被視為標識列。要覆蓋此約定並強制將其視為非標識列,可以使用值為 NoneDatabaseGenerated 屬性。

using System.ComponentModel.DataAnnotations.Schema;

public class Foo
{
    [Key]
    public int Id { get; set; } // identity (auto-increment) column
}

public class Bar
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; } // non-identity column
}

以下 SQL 建立一個包含計算列的表:

CREATE TABLE [Person] (
    Name varchar(100) PRIMARY KEY,
    DateOfBirth Date NOT NULL,
    Age AS DATEDIFF(year, DateOfBirth, GETDATE())
)
GO

要建立用於表示上表中記錄的實體,你需要使用值為 ComputedDatabaseGenerated 屬性。

[Table("Person")]
public class Person
{
    [Key, StringLength(100)]
    public string Name { get; set; }
    public DateTime DateOfBirth { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public int Age { get; set; }
}