DatabaseGenerated 屬性
指定資料庫如何為屬性生成值。有三個可能的值:
None
指定資料庫不生成值。Identity
指定該列是標識列 ,通常用於整數主鍵。Computed
指定資料庫生成列的值。
如果該值不是 None
,則 Entity Framework 不會將對該屬性所做的更改提交回資料庫。
預設情況下(基於 StoreGeneratedIdentityKeyConvention
),整數鍵屬性將被視為標識列。要覆蓋此約定並強制將其視為非標識列,可以使用值為 None
的 DatabaseGenerated
屬性。
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
要建立用於表示上表中記錄的實體,你需要使用值為 Computed
的 DatabaseGenerated
屬性。
[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; }
}