LINQ to SQL: проверьте наличие универсальной сущности в универсальном репозитории - PullRequest
1 голос
/ 22 октября 2011

У меня есть вот такой общий репозиторий

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);

, где productRepository, как это:

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

Я пришел к этому, так как я всегда хочу проверитьдля существования сущности много, поэтому мне не нужно писать один и тот же метод во всех репозиториях.

1 Ответ

6 голосов
/ 22 октября 2011

Если все ваши сущности имеют, например, свойство Guid Id, вы можете создать следующий интерфейс для ваших сущностей:

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

и ограничить свой класс репозитория им:

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

Затем вы можете определить следующую функцию в вашем базовом хранилище:

public bool Exists(T entity)
{
    return GetTable.Any(e => e.Id == entity.Id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...