使用字符串访问IDbSet

时间:2015-04-01 18:35:01

标签: c# unit-of-work

要访问我们模型中的表,我将使用类似下面的代码:

var item = _entities.Table.Where(x => x.Id = id).FirstOrDefault();

_entities是我们的模型上下文,Table将是模型中表的名称。

我如何使用字符串来表示模型中表的名称? E.g:

string tableName = "Table";
var item = _entities.tableName.Where(x => x.Id = id).FirstOrDefault();

1 个答案:

答案 0 :(得分:0)

要按名称获取属性,您可以按照以下方式执行操作:

object table = _entities.GetType().GetProperty("Table").GetValue(_entities, null);

这会将您的表格设为object,您可以将其转换为IDbSet或其他任何界面:

var table = _entities.GetType().GetProperty("Table").GetValue(_entities, null) as IDbSet;

请注意,这样做时,您不会具有类型安全的优势。您可以使用动态关键字,但随后您就可以将窗口中的类型安全性抛出。

如果有点脆弱,最好做一些事情:

if (tableName == "Table")
{
    _entities.Table...
}
else if (tableName == "OtherTable")
{
    _entities.OtherTable....
}

至少这样做,你让编译器看着你。