public interface IEntity<TId> where TId : struct
{
TId Id { get; set; }
}
public class Person: IEntity<int>
{
public int Id { get; set; }
//другие поля
}
public abstract class GenericRepository<TEntity, TKey>: where TKey : struct where TEntity : IEntity<TKey>
{
internal ApplicationDbConext context;
public GenericRepository(ApplicationDbConext context)
{
this.context = context;
}
//сделаем глупый метод, чисто для примера
public async Task<TEntity> FirstOrDefaultAsync(TKey id)
{
return await сontext.Set<TEntity>().FirstOrDefaultAsync(x => x.Id.Equals(id));
}
}
public class PersonRepository: GenericRepository<Person, int>
{
//методы для PersonRepository
}