Entity Framework Fluent API (2)

  在前一篇博客中,介绍了Entity Framework Fluent API的使用。把所有的实体类的映射都写在了DbContext的OnModelCreating中。但是如果一个应用中的实体类有很多,那么使用这种方式,把所有的实体类的映射都写在了一起,不方便管理。这里介绍另外一种使用方式,可以更加模块化的管理这些配置。

完整代码

(1)实体类:Chain

1 public class Chain
2 {
3     public int Id { get; set; }
4 
5     public string Name { get; set; }
6 }

(2)实体类:Hotel

 1 public class Geolocation
 2 {
 3     public double Longitude { get; set; }
 4 
 5     public double Latitude { get; set; }
 6 }
 7 
 8 public class Hotel
 9 {
10     public int Id { get; set; }
11 
12     public string Name { get; set; }
13 
14     public string Address { get; set; }
15 
16     public byte[] RowVersion { get; set; }
17 
18     public Geolocation Geolocation { get; set; }
19 
20     public string Remark { get; set; }
21 }

(3)实体类映射:ChainMap

 1 public class ChainMap : EntityTypeConfiguration<Chain>
 2 {
 3     public ChainMap()
 4     {
 5         this.ToTable("Chain");
 6 
 7         this.HasKey(p => p.Id);
 8 
 9         this.Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
10         this.Property(p => p.Name).IsRequired().HasMaxLength(63);
11     }
12 }

(4)实体类映射:HotelMap

 1 public class HotelMap : EntityTypeConfiguration<Hotel>
 2 {
 3     public HotelMap()
 4     {
 5         this.ToTable("Hotel");
 6 
 7         this.HasKey(p => p.Id);
 8 
 9         this.Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
10         this.Property(p => p.Name).IsRequired().HasMaxLength(63);
11         this.Property(p => p.Address).HasMaxLength(127);
12         this.Property(p => p.RowVersion).IsRowVersion();
13 
14         this.Ignore(p => p.Remark);
15     }
16 }
17 
18 public class GeolocationMap : ComplexTypeConfiguration<Geolocation>
19 {
20     public GeolocationMap()
21     {
22         this.Property(p => p.Longitude).IsOptional().HasColumnName("Longitude");
23         this.Property(p => p.Latitude).IsOptional().HasColumnName("Latitude");
24     }
25 }

(5)数据上下文:DbContext

 1 public class EntFraContext : DbContext
 2 {
 3     public IDbSet<Chain> Chains { get; set; }
 4 
 5     public IDbSet<Hotel> Hotels { get; set; }
 6 
 7     protected override void OnModelCreating(DbModelBuilder modelBuilder)
 8     {
 9         modelBuilder.Configurations.Add(new ChainMap());
10         modelBuilder.Configurations.Add(new HotelMap());
11 
12         base.OnModelCreating(modelBuilder);
13     }
14 }

 

posted @ 2015-05-11 23:01  lcyan  阅读(153)  评论(0编辑  收藏  举报