LINQ to SQL:检查通用存储库中是否存在通用实体

发布于 2024-12-11 17:36:03 字数 909 浏览 0 评论 0原文

我有一个像这样的通用存储库

public class Repository<T> : IRepository<T> where T: class
{
    DataContext _db;
    public Repository()
    {
        _db = new DataContext("connection string");
    }
    System.Data.Linq.Table<T> GetTable
    {
        get { return _db.GetTable<T>(); }
    }
    public T GetBy(Func<T, bool> exp)
    {
        return GetTable.SingleOrDefault(exp);
    }
    ....
}

是否可以向该存储库添加一个通用方法来检查是否存在任何实体:这样

public bool IsExisted(T entity)
{
    ...
}

可以很容易地将其写入

_productRepository.GetBy(p => p.Id == 5 // or whatever);

产品存储库之类的 任何存储库中这是:

public class ProductRepository : Repository<Product>
{
    public ProductRepository()
        : base()
    {
    }
}

我之所以这么做是因为我总是想检查一个实体是否存在,所以我不需要在所有存储库中编写相同的方法。

I have a generic repository as like that

public class Repository<T> : IRepository<T> where T: class
{
    DataContext _db;
    public Repository()
    {
        _db = new DataContext("connection string");
    }
    System.Data.Linq.Table<T> GetTable
    {
        get { return _db.GetTable<T>(); }
    }
    public T GetBy(Func<T, bool> exp)
    {
        return GetTable.SingleOrDefault(exp);
    }
    ....
}

Is it possible to add a generic method to this repository to check for the existence of any entity like that:

public bool IsExisted(T entity)
{
    ...
}

it is easy to write it in any repository

_productRepository.GetBy(p => p.Id == 5 // or whatever);

where the productRepository like this:

public class ProductRepository : Repository<Product>
{
    public ProductRepository()
        : base()
    {
    }
}

I came to this since i always want to check for the existence of an entity alot, so i don't need to write the same method in all repositories.

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

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

发布评论

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

评论(1

看春风乍起 2024-12-18 17:36:03

例如,如果您的所有实体都有一个属性 Guid Id,您可以为您的实体创建以下接口:

public interface IEntity
{
    Guid Id { get; set; }
}

并将您的 Repository 类限制为它:

public class Repository<T> : IRepository<T>
    where T : class, IEntity
{
   ....
}

然后您可以在基本存储库中定义以下函数:

public bool Exists(T entity)
{
    return GetTable.Any(e => e.Id == entity.Id);
}

If all your entities have for example a property Guid Id you can create the following interface for your entities:

public interface IEntity
{
    Guid Id { get; set; }
}

And restrict your Repository class to it:

public class Repository<T> : IRepository<T>
    where T : class, IEntity
{
   ....
}

You can then define the following function in your base repository:

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