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