我正在尝试使用Linq To SQL实现通用存储库。我的问题在于我的一些基础表具有int
ID和一些Guid
ID。我该如何解释?
public T GetById(int id)
{
return this._context.GetTable<T>().Single(x => x.ID.Equals(id));
}
答案 0 :(得分:4)
将另一个通用参数添加到存储库界面。
public interface IRepo<TType, PKType>
{
TType GetById(PKType id);
}
然后实施它。
public class CustomerRepo : IRepo<Customer, Guid>
{
public Customer GetById(Guid id)
{
// code to get from repo
}
}
答案 1 :(得分:-3)
嗯,首先 - 一个GetById开始没有意义,听说过LINQ?让用户决定。得到任何东西。
其次,即使您坚持这一点,仍然存在仿制药。
GetById(T id)
会走得那么远,你可以在泛型上有多个Type,但你假设“id”为name,这需要一个接口。
事实上,你有更严重的问题,如
在这种情况下,GetTable()。Single(x =&gt; x.ID.Equals(id));
可能在编译器中流行,没有限制要求T具有id字段。因此,您不能在通用方法中使用它。
这就是说 - 正如我在开始时所说的那样,通过剥夺用户对语言(linq)的重要部分的强大功能,你基本上是在创建另一个通用错误存储库的反模式实现。