配置EF使之在映射数据时绕开约定:注释和Fluent API。注释仅涵盖一部分Fluent API功能。
通过重写DbContext
上的OnModelCreating
方法来访问Code First Fluent API。
Property方法用于为每个属于实体或复杂类型的属性配置特性。Property方法用于获取给定属性的配置对象。配置对象上的选项特定于要配置的类型(IsUnicode只能用于字符串属性)
有关主键的实体框架约定如下:
要显示将某个属性设置为主键,可使用HasKey方法。
modelBuilder.Entity<Person>().HasKey(t => t.Id)
modelBuilder.Entity
modelBuilder.Entity
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
如果超出最大长度,将引发DbEntityValidationException
异常
modelBuilder.Entity
.HasMaxLength(50);
modelBuilder.Entity
.IsRequired();
modelBuilder.Entity
以下将Name CLR属性映射到数据库中的"myNmae"列
modelBuilder.Entity<Person>().Property(t => t.Name)
.HasColumnName("myname");
默认情况下,字符串为Unicode(sqlserver中的nvarchar),可以使用IsUnicode方法指定字符串为varchar类型
modelBuilder.Entity<Person>()
.Property(t => t.Name).IsUnicode(false);
modelBuilder.Entity<Person>()
.Property(t => t.Name).HasColumnType("varchar");
modelBuilder.Entity<OfficeAssignment>()
.Property(t => t.Timestamp)
.IsConcurrencyToken();
按约定,没有指定主键的类型将被视为复杂类型。在一些情况下,Code First不会检测复杂类型
modelBuilder.ComplexType<Details>();
modelBuilder.Ignore<OnlineCourse>();
modelBuilder.Entity<Department>()
.ToTable("t_Department");
也可以指定架构名称
modelBuilder.Entity