如何实体框架中的T的动态地图属性

时间:2017-06-07 15:52:48

标签: c# reflection entity-framework-6

使用实体框架我可以在MyContext中覆盖OnModelCreating方法并执行以下操作:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
      //...
      modelBuilder.Entity<MyEntity>()
            .Property(x => x.Foo.Value)
            .HasColumnName("Foo");
      modelBuilder.Entity<OtherEntity>()
            .Property(x => x.Bar.Value)
            .HasColumnName("Bar");
  }

其中Foo和Bar是ISomeInterface的属性,用于定义属性Value。

但是,我不想为MyContext中的每个EntityType指定此映射。我想以更通用的方式定义模式(使用reflextion)。像

这样的东西
var types = Assembly.GetCallingAssembly().GetTypes();
foreach(var type in types){
    var props = type.GetProperties().Where(p => p.PropertyType is ISomeInterface);
    foreach (var prop in props){
         var valueProp = prop.PropertyType.GetProperty("Value");
         modelbuilder.GetEntity(type)
            .Property(valueProp)
            .HasColumnName(prop.Name)
    }
}

可以这样做吗?

0 个答案:

没有答案