按类型获取EF表(参数)

时间:2014-11-13 16:49:07

标签: c# entity-framework reflection

我有这个非常旧的数据库,其中所有表都像这个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;
}

1 个答案:

答案 0 :(得分:0)

我认为另一种方法可能会更好。在EF模型中,您可以重命名C#对象和属性。使用模型中所选属性的属性,可以更改名称以除去前缀。同样,模型中所选表的属性允许您更改实体集名称(它们的集合名称)和C#类的名称。基础数据库表和列的名称不受影响。