17.翻譯系列:將Fluent API的配置遷移到單獨的類中【EF 6 Code-First系列】

原文連接:https://www.entityframeworktutorial.net/code-first/move-configurations-to-seperate-class-in-code-first.aspxhtml

 

EF 6 Code-First系列文章目錄:數據庫

 

 

你在前面的章節中已經看到,咱們在OnModelCreating()方法中,使用Fluent API爲全部的實體類進行配置。然而這樣作,當配置的實體類不少的時候,就變得很難維護了。EF 6 容許你單獨爲每一個實體,在單獨的類中進行配置。app

看看下面咱們在Student實體中配置的代碼:ide

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("DoB") .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"); }); } }

你能夠將上面的配置部分,移動到單獨的類中,這個類繼承自EntityTypeConfiguration<TEntity>。看看下面的StudentEntityConfigurations類,它包含全部Student類的配置:函數

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"); }); } }

正如上面的代碼你所看到的那樣,咱們將全部Student的配置部分,放到了StudentEntityConfiguration類的構造函數中。測試

如今你須要使用Fluent API添加這個配置類:ui

public class SchoolDBContext: DbContext { public SchoolDBContext(): base() { } public DbSet<Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // Moved all Student related configuration to StudentEntityConfiguration class
        modelBuilder.Configurations.Add(new StudentEntityConfiguration()); } }

因此你能夠,使用不少的單獨的配置類,這樣就使得代碼,更加可讀,更加可維護。this

相關文章
相關標籤/搜索