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");
    }
  • 相关阅读:
    mybatis Column 'XXX' in where clause is ambiguous 错误
    IDEA 代码提示不区分大小写
    接口安全问题
    spring 事务问题
    js问题: is not a function
    Uncaught TypeError: form.attr is not a function 解决办法
    springmvc 跳转页面或者返回json
    ajax 跳转页面时添加header
    maven工程 添加本地jar依赖
    mysql 创建备份表
  • 原文地址:https://www.cnblogs.com/maanshancss/p/13360371.html
Copyright © 2011-2022 走看看