使用字符串访问 IDbSet

Access IDbSet using a string

要在我们的模型中访问 table,我将使用类似以下代码的内容:

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

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

如何使用字符串来表示模型中 Table 的名称? 例如:

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

要按名称获得 属性,您需要按照以下步骤进行操作:

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

这会让您获得 table 作为 object,您可以将其转换为 IDbSet 或您拥有的任何其他接口:

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

请注意,这样做时您将无法享受类型安全的优势。您可以使用 dynamic 关键字,但是这样您就把类型安全抛出了 window。

如果有点脆弱,可能更可取:

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

至少这样做,编译器会保护你。