数据类型的约定配置
默认规则 | 列的数据类型是由数据库决定的,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>() |