通用 T GetByID(K ID_)

发布于 2024-10-08 03:15:29 字数 413 浏览 3 评论 0原文

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

我的存储库定义为:

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

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

    _repository.GetByID<int>(123);

我想隐藏 tyoe 定义,但无法弄清楚在哪里或如何执行此操作。

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

关于这个问题有什么想法吗?

I'm trying to implement a generic repository using the entity framework.

My repository is defined as :

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

I want to add a generic GetByID where the type of ID being passed in is generic too. I don't really want my business logic to tell me the type is e.g....

    _repository.GetByID<int>(123);

I want to hide the tyoe definition but can't figure out where or how to do this.

Most posts on Stackoverflow seem to just have their ID's as ints. I don't want this as your identifiers aren't always going to be ints!

Any ideas on this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

時窥 2024-10-15 03:15:29

我这样做了

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

然后我继承了这个接口

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

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

I did this

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

Then I inherit from this interface

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

This makes it very DI/IoC and Unit Testing friendly too.

梨涡 2024-10-15 03:15:29

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

虽然不是最优的,但它确实有效。

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

I have defined ID as object in my IRepository. Sometimes it is int, sometimes Guid and sometimes string.

It is sub-optimal but it works.

interface IRepository<T>
{
    T GetById(object id);
}
自找没趣 2024-10-15 03:15:29

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

var t = new Thing();

t.GetById(44);

其中

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

You can define a method as accepting a type:

var t = new Thing();

t.GetById<int>(44);

where

public class Thing
{
public void GetById<T>(T id)
{
}
}
妥活 2024-10-15 03:15:29

您是否尝试过超载?:

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

Have you tried overloading?:

T GetByID(int anint) {
    return GetByID<int>(anint);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文