我正在尝试创建一个通用方法来获取来自不同表的记录列表。根据我的互联网研究,我认为这会起作用但却无法使其发挥作用。为清晰起见,省略了许多代码:
方法:
public IEnumerable<object> GetEntityUpdates(string entity)
{
string query = "select * from " + entity;
IEnumerable<object> entityList;
entityList = db.Database.SqlQuery<object>(query).ToList();
return entityList;
}
这是我正在尝试演员的调用代码,无论我如何旋转它都会失败:
var theList = da.GetEntityUpdates("EntityName");
IEnumerable<EntityName> entityList = theList.Cast<EntityName>();
EntityName是一个数据库模型,对应于上面的选择。
然后抛出InvalidCastException。
“无法将'System.Object'类型的对象强制转换为'EntityName'。”
答案 0 :(得分:1)
将您的GetEntityUpdates
更改为使用泛型。实体框架还为DbContext提供了Set
方法,允许您访问特定类型的实体。更多信息:https://msdn.microsoft.com/en-us/library/gg696521(v=vs.113).aspx
public IEnumerable<T> GetEntityUpdates<T>() where T : class
{
return db.Set<T>().ToList();
}
然后要调用它,只需将实体类作为类型参数传递:
var foo = da.GetEntityUpdates<EntityName1>();
var bar = da.GetEntityUpdates<EntityName2>();
答案 1 :(得分:1)
您用来提取信息的方法SqlQuery<object>
依赖于反射来构建您的对象,不确定正在使用哪个框架但是会猜测您的方法是通用的可以解决问题< / p>
public IEnumerable<T> GetEntityUpdates<T>(string entity)
{
string query = "select * from " + entity;
return db.Database.SqlQuery<T>(query).ToList();
}