CodeFirst-常用特性标识详解
#设置外键
PS:当外键属性设置为[Required]时,默认设置级联删除
#内置特性
public class User
{
/// <summary>
/// DatabaseGeneratedOption:
/// Computed:在插入或更新行时,数据库将生成值。
/// Identity:在插入行时,数据库将生成值。
/// None:数据库不生成值(主键不自增)。
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Name { get; set; }
public string Address { get; set; }
//使用virtual使得改字段可以使用懒加载
//ICollection代表一种集合。将集合指定为ICollection允许您在代码中使用任何类型的集合来实现 ICollection接口
//如果要实现延迟加载,则需要ICollection
[InverseProperty("BookUser")]
public virtual ICollection<UserBook> BookList { get; set; }
//InverseProperty:指定其相关的外键导航属性
[InverseProperty("ViewableUser")]
public virtual ICollection<UserBook> ViewableBookList { get; set; }
}
//指定表名
[Table("Books")]
//ComplexType:复杂实体
//复杂类型中又含引用类型时才需指定ComplexType特性,用于多个实体映射到一个表
[ComplexType]
public class UserBook
{
/// <summary>
/// Key:设置主键。
/// DatabaseGeneratedOption:自增模式
/// 1.Computed:在插入或更新行时,数据库将生成值。
/// 2.Identity:在插入行时,数据库将生成值。
/// 3.None:数据库不生成值(主键不自增)。
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int BookID { get; set; }
//ForeignKey:设置列数据库别名
[ForeignKey("Book_Name")]
[Display(Name = "名称")]
//指定名称,排序,数据类型
[Column("SName", Order = 1, TypeName = "nvarchar")]
//MaxLength:属性指定属性允许的最大数据值长度,该属性又设置数据库中相应列的大小。它可以应用于实体的string或byte[]属性.
[MaxLength(20)]
//StringLength:属性可以应用于string实体类的属性。
//它指定字符串属性允许的最大字符数,后者又设置nvarchar数据库中相应列(在SQL Server中)的大小
[StringLength(20, ErrorMessage = "书籍名称超出长度")]
//ConcurrencyCheck:属性可以应用于EF 6和EF Core中的实体类中的一个或多个属性。
//应用属性时,数据库表中的相应列将使用该where子句在并发检查中使用,如果你的数据表中不存在时间戳,可以用此多次标记多个列用于并发检查
[ConcurrencyCheck]
//Timestamp:在实体触发Update时,会并发检查此列
//当数据表中存在时间戳时,可以用此标记列,用来减少并发操作数据导致的修改问题。
[Timestamp]
//不可为空
[Required(ErrorMessage = "书籍名称不能为空")]
public string BookName { get; set; }
public DateTime BookCreateDate{ get; set; }
/// <summary>
/// 书籍创建天数,对属性标识为Computed,EF会认为该列是通过其它列计算得出的,不会将其持久化到数据库中
/// </summary>
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int BookCreateDateCount { get; set; }
//ForeignKey:指定外键名称
[ForeignKey("IX_BookUser")]
/// <summary>
/// 设置外键,默认情况下,关闭级联更新以及删除,并创建外键索引
/// </summary>
public virtual User BookUser { get; set; }
public virtual User ViewableUser { get; set; }
//代表不需要为此列在数据库中创建属性
[NotMapped]
public string BookNote { get; set; }
//用于指定字段索引,是否集群,是否唯一值约束
[Index("INDEX_REGNUM", IsClustered = true, IsUnique = true)]
public int BookAuthor { get; set; }
}