从数据库中检索对象的通用方法

时间:2017-12-13 15:52:41

标签: c# generics

我试图让我的代码的一部分变得通用。

非通用代码:

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<>()

1 个答案:

答案 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);
    }
}

这适用于您的用例,但稍后您可能会发现需要生成自己的自定义表达式,这将更复杂一些