我正在尝试使用 Linq To SQL 实现通用存储库。我的问题在于我的一些基础表有int
ID 和一些Guid
ID。我该如何解释呢?
public T GetById(int id)
{
return this._context.GetTable<T>().Single(x => x.ID.Equals(id));
}
我正在尝试使用 Linq To SQL 实现通用存储库。我的问题在于我的一些基础表有int
ID 和一些Guid
ID。我该如何解释呢?
public T GetById(int id)
{
return this._context.GetTable<T>().Single(x => x.ID.Equals(id));
}
将另一个通用参数添加到存储库接口。
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
}
}
好吧,首先 - GetById 没有任何意义,听说过 LINQ 吗?让用户决定。有的话就去。
其次,即使你坚持这一点,仍然有泛型。
GetById (T id)
会走那么远,您可以在泛型上拥有多个类型,但您假设“id”作为名称,这需要一个接口。
事实上,你有更严重的问题,如
GetTable().Single(x => x.ID.Equals(id));
在这种情况下可能会在编译器中爆炸,没有限制要求 T 具有 id 字段。因此,您不能在通用方法中使用它。
就是这样 - 正如我在开始时所说,通过剥夺用户语言(linq)的重要部分的力量,您基本上是在创建通用坏存储库的另一个反模式实现。