Как определить метод generi c в базовом классе, который будет использовать лямбду для разных уникальных имен свойств? - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в использовании обобщенных 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 каждой таблицы. Кроме того, я ушел в функцию добавления, я сделал это правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...