【发布时间】:2015-12-03 20:14:18
【问题描述】:
我正在关注这个网站:http://deviq.com/repository-pattern/
其中有一个使用数据库上下文的存储库模式示例。我正在尝试用一个列表来实现这个通用的 Repository 类(我想要 Repository 类。这是我的要求)。但是,我遇到了 Find 方法的问题。
public class Repository<T> : IRepository<T> where T : class
{
private List<T> context;
virtual public T Find(int id)
{
// I can't figure out a way to make this work with the list of a generic type
}
}
这甚至可以在 List.Find() 中仅使用 ID 参数创建谓词吗?我猜不是,但有什么选择?
【问题讨论】:
-
存储库模式中的上下文是一个 DBContext 对象。不清楚你想做什么。
-
我认为你需要
T: IEntity,其中IEntity有一个ID。或者你可以使用反射来提取ID。 -
不完全确定我理解这个问题。但是如果 T 实现了一个带有属性 Id 的接口,那么你可以做 Find(p => p.Id == id)
-
大概你需要知道
T是什么。因为它可以是任何东西,所以你在这里无能为力。您可以将T限制为比class更具体的类型,您可以保留abstract方法,派生的存储库可以实现它,或者您可以完全省略Find(),使用代码可以添加自己的过滤器子句。 -
@user441521:你可以,尽管这样做往往表明存在设计问题。
标签: c#