3

我正在尝试使用 Linq To SQL 实现通用存储库。我的问题在于我的一些基础表有intID 和一些GuidID。我该如何解释呢?

public T GetById(int id)
{
    return this._context.GetTable<T>().Single(x => x.ID.Equals(id));
}
4

2 回答 2

6

将另一个通用参数添加到存储库接口。

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
    }
}
于 2013-01-16T21:01:51.283 回答
-3

好吧,首先 - GetById 没有任何意义,听说过 LINQ 吗?让用户决定。有的话就去。

其次,即使你坚持这一点,仍然有泛型。

GetById (T id)

会走那么远,您可以在泛型上拥有多个类型,但您假设“id”作为名称,这需要一个接口。

事实上,你有更严重的问题,如

GetTable().Single(x => x.ID.Equals(id));

在这种情况下可能会在编译器中爆炸,没有限制要求 T 具有 id 字段。因此,您不能在通用方法中使用它。

就是这样 - 正如我在开始时所说,通过剥夺用户语言(linq)的重要部分的力量,您基本上是在创建通用坏存储库的另一个反模式实现。

于 2013-01-16T21:02:20.113 回答