我试图让我的代码的一部分变得通用。
非通用代码:
public static User GetUser(int id)
{
using (var db = new BroodNodigContext())
{
return db.Users.FirstOrDefault(u => u.Id == id);
}
}
我需要的代码却切断了它的边缘:
public static object FooBar<T>(int id)
{
using (var db = new DatabaseContext())
{
return db.T.FirstOrDefault(t => t.Id == Id);
}
}
我得到了什么:
public static object GetTypeOutOfDatabase<T>(int id)
{
using (var db = new DatabaseContext())
{
dynamic test = typeof(T);
db.Set<test>();
return null;
}
}
我被告知我可以使用db.Set<>()
使其成为通用的,但我无法正确使用。
您是否知道如何将T
转换为引用类型(例如User
),以便将其放入db.set<>()
?
答案 0 :(得分:0)
实体框架提供了一个Find函数,它将按主键查找。
注意这会占用一个在find方法中使用的对象[],只需将你的id传递给一个让EF工作它的魔法,作为一个黑客我已经提供了参数来使它更容易致电
public static object FooBar<T>(params object[] id)
{
using (var db = new DatabaseContext())
{
return db.Set<T>().Find(Id);
}
}
这适用于您的用例,但稍后您可能会发现需要生成自己的自定义表达式,这将更复杂一些