Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在实体框架中动态映射T的属性_C#_Reflection_Entity Framework 6 - Fatal编程技术网

C# 如何在实体框架中动态映射T的属性

C# 如何在实体框架中动态映射T的属性,c#,reflection,entity-framework-6,C#,Reflection,Entity Framework 6,使用实体框架,我可以在MyContext中重写OnModelCreating方法,并执行以下操作: protected override void OnModelCreating(DbModelBuilder modelBuilder) { //... modelBuilder.Entity<MyEntity>() .Property(x => x.Foo.Value) .HasColumnName("

使用实体框架,我可以在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");
  }

可以这样做吗?

有很多方法-自定义约定,使用
DbModelBuilder
class
Properties
Types
方法等。但是这个示例没有意义,因为它只是复制了EF默认列名约定。不,默认设置是将属性Foo和Bar映射到它们自己的表中,并将值存储在名为“value”的列中。我希望将值存储在MyEntity和OtherEntity的表中,分别存储在名为“Foo”和“Bar”的列中,使用
DbModelBuilder
class
Properties
Types
方法等。但是这个示例没有任何意义,因为它只是复制了EF默认列名约定。不,默认值会将属性Foo和Bar映射到它们自己的表中,并将值存储在名为“value”的列中。我希望该值存储在MyEntity和OtherEntity的表中,分别位于名为“Foo”和“Bar”的列中。
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)
    }
}