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; }
}
原文地址:https://www.cnblogs.com/magicalconch/p/14457563.html