通用T GetByID <k>(K ID _)</k>

时间:2010-12-18 19:29:18

标签: c# entity-framework generics repository-pattern

我正在尝试使用实体框架实现通用存储库。

我的存储库定义为:

    public class GenericRepository<T> : IRepository<T> where T : class

我想添加一个通用的GetByID,其中传入的ID类型也是通用的。我真的不希望我的业务逻辑告诉我类型是...... ....

    _repository.GetByID<int>(123);

我想隐藏tyoe定义,但无法弄清楚在哪里或如何做到这一点。

Stackoverflow上的大多数帖子似乎只是将其ID作为整数。我不希望这样,因为你的标识符并不总是整齐的!

关于这个问题的任何想法?

4 个答案:

答案 0 :(得分:5)

我做了这个

interface IRepository<TEntity, TKey> {
     TEntity GetById(TKey id);
}

然后我继承了这个界面

class Person {
     int ID;
}
interface IPersonRepository : IRepository<Person, int> { ... }

这使得DI / IoC和单元测试非常友好。

答案 1 :(得分:1)

我已在object中将ID定义为IRepository。有时它是int,有时是Guid,有时是string

这是次优的但是有效。

interface IRepository<T>
{
    T GetById(object id);
}

答案 2 :(得分:1)

您可以将方法定义为接受类型:

var t = new Thing();

t.GetById<int>(44);

其中

public class Thing
{
public void GetById<T>(T id)
{
}
}

答案 3 :(得分:0)

您是否尝试过载?:

T GetByID(int anint) {
    return GetByID<int>(anint);
}