назначить два класса ограничению generi c во время выполнения - PullRequest
0 голосов
/ 29 марта 2020

Я хочу назначить два класса ограничению generi c во время выполнения, используя условие ИЛИ. Я не знаю, возможно ли это или нет, поскольку я относительно новичок во всем этом.

public interface IGenericRepository<TEntity> where TEntity : Employee Department

Я хочу назначить TEntity либо класс Employee, либо класс Department. Сотрудник и отдел - мои две сущности в DbContext. Пожалуйста, помогите мне в этом. Заранее спасибо.

1 Ответ

0 голосов
/ 29 марта 2020

Моя первая рекомендация: не используйте другой репозиторий generic c поверх Entity Framework, поскольку он уже реализует один.

С другой стороны, я видел случаи, когда это имеет смысл. Если вы находитесь в одном из этих случаев, рассмотрите возможность использования репозитория Generi c только для тех вещей, которые вы можете применить к каждому классу вашей модели. Как только объект вашей модели требует специального запроса, создайте для него собственный репозиторий. Например,

, возможно, для Отдела вы используете только ListAll (), а затем используете универсальный репозиторий c. .

Но давайте представим, что для сотрудника вы можете захотеть сделать более сложные вещи, например ListAllEmployessUnderBossThatAreOnHolidays (начальник сотрудника)

Тогда у вас может быть такая структура:

// All model classes inherit from this one
public class ModelObject
{}

public class Employee: ModelObject
{}

public class Department: ModelObject
{}

// This repository could be use for simple model objects that do simple operations
// For example, -ALL- Department operations are simple, and it never requires a 
// complex query. So i handle it with this repository to avoid code duplication with 
// other model objects that are also simple
public class IGenericRepository<TEntity> where TEntity : ModelObject 
{ }

// Employee has some complex queries, so I create a repository for it that might or 
// might not inherit from IGenericRepository
public class EmployeeRepository : IGenericRepository<Employee>
{ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...