[Table]
Table特性可以应用于一个领域类上面,用来在数据库中生成相应名称的数据表。它重写了EF 6和 EF Code 中默认的约定,根据默认约定,EF 6和EF Core创建的表的名称是实体名称+s(或者es),并且创建的数据表的列名称和实体属性名称一样。
[Table("StudentInfo",Schema="Sc")]
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
}
如上Student类:数据库生成的表名为Sc.StudentInfo
* Table Attribute: [Table(string name, Properties:[Schema = string])
name:数据表的名称
Schema:数据库的模式名称
2. [Key]
Key标示字段为主键,如果多个字段用Key标示,则会默认生成联合主键。
3. [Column]
Column特性,可以应用于实体的一个或者多个属性上面,用来配置数据库中数据表中列的列名、列的数据类型以及列的先后顺序。
[Table("StudentInfo",Schema="Sc")]
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
[Column("CreateTime",TypeName="Date")]
public DateTime AddTime { get; set; }
}
如上AddTime列:数据库生成的字段将是“CreateTime”而不是实体类中的AddTime,类型是“Date”而不是默认的DateTime。
* Column Attribute: [Column (string name, Properties:[Order = int],[TypeName = string])
name:表的数据列的名称
Order:列的顺序,从索引0开始
TypeName:列的类型名称
4. [Required]
Required特性可以应用于一个实体的一个或多个属性上面。EF将会为标识Required特性的属性,在数据库表的列中生成不为空(not null)的列。
5. [Index]
用来在特定的列上面创建索引,默认情况下,索引的名称是Idx_{属性的名称}。
[Table("StudentInfo",Schema="Sc")]
public class Student
{
public int StudentID { get; set; }
[Index("Idx_Student_Name",IsClustered=true,IsUnique=true)]
public string Name { get; set; }
[Column("CreateTime",TypeName="Date")]
public DateTime AddTime { get; set; }
}
如上Name字段,数据库创建的索引名称“Idx_Student_Name”,为聚合索引,唯一索引。
* Column Attribute: [Index(string name, Properties:[IsClustered = bool],[IsUnique= bool])
name:索引名称
IsClustered : 是否是建聚合索引
IsUnique:是否是唯一索引
6. [ForeignKey]
数据注解中的ForeignKey特性,是用来在两个实体间配置外键关系。
7. [NotMapped]
当我们不想实体类中的某个或者某些属性,不要映射成数据库中的列的时候。可以使用NotMapped特性,标识NotMapped特性在属性上面就行了。默认情况下,EF为实体的每个属性映射数据列。【必须包含get;和set;】。NotMapped特性重写了这个约定。
EF不会为没有get;和set;的属性,创建列。
8. [StringLength]和[MaxLength]
StringLength特性可以应用于实体的string类型的属性上,它指定了属性的所允许的最大字符长度,然后对应在数据库中就生成相应长度的数据列(在SQL Server数据库中是,nvarchar类型)。
MaxLength特性指定了属性的值所允许的最大值,然后在数据库中就生成相应列的最大值。MaxLength特性可以应用于实体的String类型的属性和byte[]数组类型的属性上。
区别:[MaxLength] 适用的类型比[StringLength]多。