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>()

 

posted @ 2012-02-16 14:07  虎头  阅读(1121)  评论(0编辑  收藏  举报