C# 如何在实体框架中动态映射T的属性
使用实体框架,我可以在MyContext中重写OnModelCreating方法,并执行以下操作: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("
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
classProperties
和Types
方法等。但是这个示例没有意义,因为它只是复制了EF默认列名约定。不,默认设置是将属性Foo和Bar映射到它们自己的表中,并将值存储在名为“value”的列中。我希望将值存储在MyEntity和OtherEntity的表中,分别存储在名为“Foo”和“Bar”的列中,使用DbModelBuilder
classProperties
和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)
}
}