Хитрость заключается в том, чтобы установить ограничение типа where
для вашего универсального типа на класс BaseRepository
. Попробуйте что-то похожее на это:
ВНИМАНИЕ: код воздуха; -)
Базовая модель:
public interface IDbTable
{
bool IsActive { get; set; }
}
public class DbTable
{
public bool IsActive { get; set; }
}
Ваша модель
public class Category : DbTable
{
public int CatId { get; set; }
public string CatName { get; set; }
}
public class Product : DbTable
{
public int PrdId { get; set; }
public string PrdName { get; set; }
}
Ваш репозиторий
public interface IBaseRepository<T> where T : class, IDbTable
{
void Deactivate<T>(T entity);
}
public class BaseRepository<T> : IBaseRepository
{
public void Deactivate<T>(T entity)
{
entity.IsActive = false;
}
}
Вы можете пойти еще дальше и расширить свою таблицу IDb, добавив в нее еще более общие и полезные столбцы. Э.Г.
public interface IDbTable
{
int Id { get; set; }
bool IsActive { get; set; }
DateTime UpdatedOn { get; set; }
DateTime CreatedOn { get; set; }
}
Repo
public interface IBaseRepository<T> where T : class, IDbTable
{
T GetById(int id);
void Add(T entity);
void Update(T entity);
void Deactivate(T entity);
}
public class BaseRepository<T> : IBaseReposiotry<T>
{
public T GetById(int id)
{
//code to get the entity by id
}
public void Add(T entity)
{
entity.CreatedOn = DateTime.UtcNow;
entity.UpdatedOn = DateTime.UtcNow;
}
public void Update(T entity)
{
entity.UpdatedOn = DateTime.UtcNow;
}
public void Deactivate(T entity)
{
entity.IsActive = false;
}
}
Эти две статьи также должны вам помочь:
новый репозиторий (). DoMagic ()
Реализация простого универсального репозитория с LinqToSql
HTHS
Charles