zoukankan      html  css  js  c++  java
  • 3.1 创建模型-实体属性

    属性的优先级

    特性(称为数据注释)应用于类和属性。 数据注释会替代约定,但会被 Fluent API 配置替代,也就是OnModelCreating 里面的等级最高; 下面的例子一般会使用两种模式都写一遍;

    修改字段数据类型

    比如今天写了2个byte类型的字段,需要把字段属性修改为 tinyint 还是需要修改的

    //注解模式
    public class Blog
    {
       public int BlogId { get; set; }
       [Column(TypeName = "varchar(200)")]
       public string Url { get; set; }
    
       [Column(TypeName = "decimal(5, 2)")]
       public decimal Rating { get; set; }
    }
    
    // Fluent  API模式
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
       modelBuilder.Entity<Blog>(eb =>
        {
            eb.Property(b => b.Url).HasColumnType("varchar(200)");
            eb.Property(b => b.Rating).HasColumnType("decimal(5, 2)");
        });
    }

    修改列的默认值

    在关系数据库中,可以使用默认值来配置列;如果插入的行没有该列的值,将使用默认值。

    可以在属性上配置默认值:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Rating)
            .HasDefaultValue(3);
    }

    修改列的最大长度

    public class Blog
    {
        public int BlogId { get; set; }
        [MaxLength(500)]
        public string Url { get; set; }
    }
    
    //API模式修改
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Url)      
            .HasMaxLength(500);
    }
    

    精度和小数位

    decimal 属性,精度定义表示列将包含的任何值所需的最大位数,而 scale 定义所需的最大小数位数。 对于 DateTime 属性,精度定义表示秒的小数部分所需的最大位数,并且不使用小数位数

    在将数据传递给提供程序之前,实体框架不会进行任何精度验证或缩放。 根据需要验证提供程序或数据存储。 例如,如果以 SQL Server 为目标,则数据类型为的列 datetime 不允许设置精度,而一个列的 datetime2 精度介于0到7(含)之间。

    在下面的示例中, Score 将属性配置为具有精度14和小数位数2将导致 decimal(14,2) 在 SQL Server 上创建类型为的列,并且 LastUpdated 将属性配置为具有精度3将导致类型为的列 datetime2(3)

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Score)
            .HasPrecision(14, 2);
    
        modelBuilder.Entity<Blog>()
            .Property(b => b.LastUpdated)
            .HasPrecision(3);
    }

    必需属性和可选属性

    按照约定,把可以包含null值的列定义为可选列,不允许包含null值的定为必填列;

    比如 int ,bool decimal 都是必须填列;

    //注解模式
    public class Blog
    {
        public int BlogId { get; set; }
        [Required]
        public string Url { get; set; }
    }
    
    // API模式
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.Url)
            .IsRequired();
    }
    

    另外还有? 为null的引用类型不关注。

    包含和排除属性

    //注解模式
    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }
    
        [NotMapped]
        public DateTime LoadedFromDatabase { get; set; }
    }
    //API 模式
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Ignore(b => b.LoadedFromDatabase);
    }
    

    给列起别名

    按照约定,使用关系型数据库的时候,实体属性映射到与属性同名的表列。若是希望使用不同的名称配置列,可以使用下面的代码片段

    //注解模式
    public class Blog
    {
        [Column("blog_id")]
        public int BlogId { get; set; }
        public string Url { get; set; }
    }
    
    //API 模式
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .Property(b => b.BlogId)
            .HasColumnName("blog_id");
    }
  • 相关阅读:
    密码学
    MD5
    计算机基础之操作系统
    python中列表之间求差集、交集、并集
    Python语言中各种进制相互转换
    计算机基础
    bzoj2705 [SDOI2012]Longge的问题
    bzoj3160 万径人踪灭
    codeforces 528D Fuzzy Search
    杜教筛 && bzoj3944 Sum
  • 原文地址:https://www.cnblogs.com/maanshancss/p/13360371.html
Copyright © 2011-2022 走看看