Я новичок в использовании обобщенных c классов, поэтому я не уверен, что мой вопрос использует правильные термины. Я создаю проект с использованием EF Core. Я создал несколько классов репозитория для каждой модели, но он становится громоздким, и я смотрю на создание базового репозитория для распространенных методов CRUD. Я пытаюсь использовать обобщенные методы c, следуя некоторым примерам, которые я видел в Интернете. Но я не знаю, как определить эти методы для использования свойств, которые будут иметь разные имена в каждом дочернем классе.
Так что у каждого хранилища есть такой метод:
public Contact Select(int contactId)
{
return _ctx.Contact.FirstOrDefault(x => x.ContactId == contactId);
}
или
public ContactRole Select(int contactRoleId)
{
return _ctx.ContactRole.FirstOrDefault(x => x.ContactRoleId == contactRoleId);
}
Следуя примерам, я создал интерфейс
public interface IRepositoryBase<T>
{
T Select(int id);
void Add(T entity);
void Update(T entity);
void Delete(T entity);
IQueryable<T> FindAll();
}
, а затем абстрактный базовый класс, подобный этому
public abstract class RepositoryBase<T> : IRepositoryBase<T> where T : class
{
public T Select(int id)
{
this._context.Set<T>().FirstOrDefault(x => x.ContactRoleId == id);
}
public void Add(T entity)
{
this._context.Set<T>().Add(entity);
}
}
Я не знаю, что я я должен поставить вместо ContactRoleId в этой функции. Я уверен, что, если бы все модели использовали одно и то же поле под названием «Id», оно могло бы работать, но у базы данных, которую я использую, есть другое имя для поля id каждой таблицы. Кроме того, я ушел в функцию добавления, я сделал это правильно?