• Code First 数据库的表中属性的配置


    数据类型的约定配置

    默认规则

    列的数据类型是由数据库决定的,SqlServer的默认规则如下

    String: nvarchar(MAX)

    Int:int

    Bool:bit

    Decimal:decimal(18,2)

    Byte[]:varbinary(MAX)

    DataAnnotation

    [Column(TypeName=”varchar”)]

    Fluent

    modelBuilder.Entity<Category>().Property(c=>c.Name).HasColumnType(“varchar”)

    数据类型的长度约定配置

    默认规则

    max

    DataAnnotation

    [MaxLength(100)]

    [MinLength(10)]

    [StringLength(50)]

    Fluent

    modelBuilder.Entity<Category>().Property(c=>c.Name).HasMaxLength(50)

    列是否可空的约定配置

    默认规则

    主键非空

    外键可以为空

    Int,bit,decimal,dateTime非空

    Varchar,varbiary 可以为空

    DataAnnotation

    [Required]

    Fluent

    modelBuilder.Entity<Category>().Property(t=>t.Name).IsRequired()

    主键约定配置

    默认规则

    属性名称是Id,或者是类名称+Id作为主键

    DataAnnotation

    [Key]

    Fluent

    modelBuilder.Entity<Category>().HasKey(c=>c.Id)

    EF框架要求每个实体都要有主键,没有主键会抛出异常,当你的主键是GUID时,需要特别处理,DataAnnotation :[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    Fluent:modelBuilder.Entity<Category>().Porperty(c=>c.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)

    时间戳

    只有byte[]类型的属性可以映射TimeStamp

    DataAnnotation:[Timespamp]

    Fluent:modelBuilder.Entity<Category>().Property(c=>c.RowVersion).IsRowVersion()

    Unicode数据类型

    默认规则

    默认为Unicode数据

    DataAnnotation

    不能配置

    Fluent

    IsUnicode()

    Decimal设置

    默认规则

    (8,2)

    DataAnnotation

    不可以设置

    Fluent

    HasPrecision(10,2)

    复杂的数据类型

    默认规则

    复杂类型没有Key属性,用做其他类属性时,不能用做集合属性

    DataAnnotation

    [Complex]

    Fluent

    modelBuilder.Complex<Address>()

  • 相关阅读:
    57. Insert Interval
    56. Merge Intervals
    55. Jump Game
    54. Spiral Matrix
    53.Maximum Subarray
    窗口左上角添加图标
    点击Qtableview表头,触发事件
    变参数的宏
    用互斥锁实现程序只能有一个实例
    Visual Studio 2015 + Windows 2012 R2, c++/cli Array::Sort() 抛出异常
  • 原文地址:https://www.cnblogs.com/50614090/p/2354117.html
Copyright © 2020-2023  润新知