EF从字符串中获取映射列名称

时间:2013-05-22 09:17:14

标签: c# entity-framework reflection

我有三个共享公共基类的实体。每个实体都有自己的上下文Map类,加载得很好。每个实体都有一个不同的主键名称,我在基类中重命名,因此我可以在使用相同的属性名称时使用这三个实体的泛型方法。

进入数据库时​​,一切都可以正常映射,例如我可以db.Vehicle.Where(v => v.VehicleID < 100),它会转换为与VehicleID不同的数据库列名。

问题是我现在想要走向相反的方向。例如,我可能有字符串"Length"但在一个表中它可能是Length1而在另一个Length2中。我想使用我在模型构建器中使用的相同映射,以便能够将"Length"转换为基类中基于(v => v.Length)属性的相应值。

有没有人对如何实现这一点有任何想法?

1 个答案:

答案 0 :(得分:0)

如果您已经尝试过这种流畅的API并且它不起作用,那么我建议将该属性声明为虚拟属性。

modelBuilder.Entity<ConcreteClass1>()
.Property(f => f.Length)
                .HasColumnName("Length1");

modelBuilder.Entity<ConcreteClass2>()
.Property(f => f.Length)
                .HasColumnName("Length2");