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

本文关键字:映射 获取 字符串 EF | 更新日期: 2023-09-27 18:14:42

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

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

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

有谁对如何实现这一点有什么想法吗?

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

如果您已经尝试过这个流畅的API,但它没有工作,那么我建议将该属性声明为virtual。

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