zoukankan      html  css  js  c++  java
  • 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; }
    }
    
  • 相关阅读:
    [Leetcode] Largest Rectangle in Histogram
    [Leetcode] Unique Binary Search Trees II
    [Leetcode] Remove Duplicates from Sorted List II
    [Leetcode] Container With Most Water
    [Leetcode] Trapping Rain Water
    [Jobdu] 题目1390:矩形覆盖
    [Leetcode] Integer to Roman
    [Leetcode] Word Break
    Notes on Convolutional Neural Networks
    lecture5-对象识别与卷积神经网络
  • 原文地址:https://www.cnblogs.com/magicalconch/p/14457563.html
Copyright © 2011-2022 走看看