EF CodeFirst系列(7)--- FluentApi配置單個實體
阿新 • • 發佈:2018-09-25
ext () rst fig property right 很難 tex tro
我們已經知道了在OnModelCreating()方法中可以通過FluentApi對所有的實體類進行配置,然而當實體類很多時,我們把所有的配置都放在OnModelCreating()方法中很難維護。EF6允許我們給每一個實體添加一個單獨的配置類,通過這個配置類來對相應的實體進行配置。
以配置Student實體類為例,我們在OnModelCreating()方法中配置Student實體,代碼如下:
public class SchoolDBContext: DbContext { public SchoolDBContext(): base() { }public DbSet<Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Student>().ToTable("StudentInfo"); modelBuilder.Entity<Student>().HasKey<int>(s => s.StudentKey); modelBuilder.Entity<Student>() .Property(p => p.DateOfBirth) .HasColumnName("Birthday") .HasColumnOrder(3) .HasColumnType("datetime2"); modelBuilder.Entity<Student>() .Property(p => p.StudentName) .HasMaxLength(50); modelBuilder.Entity<Student>() .Property(p => p.StudentName) .IsConcurrencyToken(); modelBuilder.Entity<Student>() .HasMany<Course>(s => s.Courses) .WithMany(c => c.Students) .Map(cs => { cs.MapLeftKey("StudentId"); cs.MapRightKey("CourseId"); cs.ToTable("StudentCourse"); }); } }
我們可以將每個實體類的配置放在一個對應的的配置類,(如Studnet的實體配置在StudentEntityConfiguratinos配置類中),如果程序中有很多實體類,采用單獨配置的方式可以很好的提高配置的可維護性和可讀性。
步驟如下:
步驟①:創建一個StudentEntityConfiguratinos類,這個類繼承 EntityTypeConfiguration<TEntity> ,代碼如下:
public class StudentEntityConfiguration: EntityTypeConfiguration<Student> { public StudentEntityConfiguration() { this.ToTable("StudentInfo"); this.HasKey<int>(s => s.StudentKey); this.Property(p => p.DateOfBirth) .HasColumnName("DoB") .HasColumnOrder(3) .HasColumnType("datetime2"); this.Property(p => p.StudentName) .HasMaxLength(50); this.Property(p => p.StudentName) .IsConcurrencyToken(); this.HasMany<Course>(s => s.Courses) .WithMany(c => c.Students) .Map(cs => { cs.MapLeftKey("StudentId"); cs.MapRightKey("CourseId"); cs.ToTable("StudentCourse"); }); } }
步驟②: 在OnModelCreating()方法中使用上邊的配置類:
public class SchoolDBContext: DbContext { public SchoolDBContext(): base() { } public DbSet<Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 添加Student實體的配置 modelBuilder.Configurations.Add(new StudentEntityConfiguration()); } }
EF CodeFirst系列(7)--- FluentApi配置單個實體