使用字符串访问 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....
}
至少这样做,编译器会保护你。
要在我们的模型中访问 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....
}
至少这样做,编译器会保护你。