使用 Fluent API 配置/映射属性和类型

配置EF使之在映射数据时绕开约定:注释和Fluent API。注释仅涵盖一部分Fluent API功能。

通过重写DbContext上的OnModelCreating方法来访问Code First Fluent API。

属性映射

Property方法用于为每个属于实体或复杂类型的属性配置特性。Property方法用于获取给定属性的配置对象。配置对象上的选项特定于要配置的类型(IsUnicode只能用于字符串属性)

配置主键

有关主键的实体框架约定如下:

  1. 类定义名称称为“ID”或“Id”的属性
  2. 或类名后跟“ID”或"Id"

要显示将某个属性设置为主键,可使用HasKey方法。

modelBuilder.Entity<Person>().HasKey(t => t.Id)

配置组合主键

modelBuilder.Entity<Person>().HasKey(t => new { t.Id ,t.Name});

关闭数值主键标识

modelBuilder.Entity<Person>().Property(t => t.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

指定属性的最大长度

如果超出最大长度,将引发DbEntityValidationException异常

 modelBuilder.Entity<Person>().Property(t => t.Name)
            .HasMaxLength(50);

将属性配置为必须

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

指定不将CLR属性映射到数据库中的列

modelBuilder.Entity<Person>().Ignore(t => t.Name);

将CLR属性映射到数据库中的特定列

以下将Name CLR属性映射到数据库中的"myNmae"列

 modelBuilder.Entity<Person>().Property(t => t.Name)
            .HasColumnName("myname");

配置字符串属性是否支持unicode内容

默认情况下,字符串为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>();

指定不将CLR实体类映射到数据库中的表

modelBuilder.Ignore<OnlineCourse>();

将CLR实体类型映射到数据库中的特定表

modelBuilder.Entity<Department>()  
.ToTable("t_Department");

也可以指定架构名称

modelBuilder.Entity<User>().ToTable("User","System");
posted @ 2015-06-30 22:42  senki  阅读(643)  评论(0编辑  收藏  举报