我有这个非常旧的数据库,其中所有表都像这个ANAGT*postfix*
一样,所有列都是这样的*prefix*_*column name*
。
我必须或多或少地查询具有相同查询的所有表,但显然列的名称都是不同的,所以我必须用带有字符串的sql语句做一些技巧,但我更喜欢得到一个使用EF时出现错误的强类型异常。
所以我创建了一些接口并在EF模型的部分类中实现它们
public partial class *table name* : IIdentificable, ICountabile {}
IIdentificabile
表示有一个公共名称的方法可以获取所有ID(而不是查询*prefix*_ID
),所以当我必须查询表时,我只需要做
var result = from elem in myContext.[Table]
where elem.GetId() == 1
select elem;
我创建了一个通用方法,可以从某个界面获取所有类型(例如IIdentificable
),现在我必须按类型获取EF表。
var tablesType = typeof(myModel).Assembly
.GetExportedTypes()
.Where(t=>t.IsAssignableFrom(typeof(T)));
foreach(Type t in tablesType){
var query = from elem in myContext.GetTable(t) //and here's what I can't do
select elem.GetId() == 1
select elem;
}
答案 0 :(得分:0)
我认为另一种方法可能会更好。在EF模型中,您可以重命名C#对象和属性。使用模型中所选属性的属性,可以更改名称以除去前缀。同样,模型中所选表的属性允许您更改实体集名称(它们的集合名称)和C#类的名称。基础数据库表和列的名称不受影响。