Как я могу написать общие запросы в рамках сущности? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть 3 метода, это те же методы, только некоторые параметры будут изменены. Я хочу написать один метод, как я могу написать

        public string method1(int id)
    {
        var getAllStudents = rep.Students.Where(e => e.StudentId == id).ToList();
        foreach (var item in getAllStudents)
        {
            if (item.isActive != true)
                return "Error";

        }

        return "OK";

    }
    public string method2(int id)
    {
        var getAllTeachers = rep.Teachers.Where(e => e.TeacherId == id).ToList();
        foreach (var item in getAllTeachers)
        {
            if (item.isActive != true)
                return "Error";

        }

        return "OK";

    }
    public string method3(int id)
    {
        var getAllClasses = rep.Classes.Where(e => e.ClassId == id).ToList();
        foreach (var item in getAllClasses)
        {
            if (item.isActive != true)
                return "Error";

        }

        return "OK";

    }

Я думаю, что есть очень простой способ написать 1 метод. мысль, где параметр имеет другой идентификатор .. Спасибо.

Ответы [ 4 ]

0 голосов
/ 15 мая 2018

Я только что нашел ответ, используя общий репо

public T GetEntity<T>(int Id)
where T : class
    {
        using (MyEntities rpContext = new MyEntities())
        {
            return rpContext.Set<T>().Find(e => e.Id == Id);
        }
    }

после вызова

var entityStudent = GetEntity<Student>(1);
var entityTeacher = GetEntity<Teacher>(1);
var entityClasses = GetEntity<Classes>(1);
0 голосов
/ 15 мая 2018

У вас есть Создать Перечисление

  Public Enum ParameterStaus:short
  {
    Student=1,
    Teacher=2,
    Classess=3
  }
  public string method2(int id.ParameterStatus status)
  {
   if(status==ParameterStatus.Teacher)
   {
    var getAllTeachers = rep.Teachers.Where(e => e.TeacherId == id).ToList();
    foreach (var item in getAllTeachers )
    {
        if (item.isActive != true)
            return "Error"; 

      }

      return "OK"; 
    }
  }
  Else if(status==ParameterStatus.Student)
   {
      var getAllStudents = rep.Students.Where(e => e.StudentId == id).ToList();
     foreach (var item in getAllStudents)
     {
         if (item.isActive != true)
            return "Error";

      }

     return "OK";
   }
   Else
   {
     var getAllClasses = rep.Classes.Where(e => e.ClassId == id).ToList();
     foreach (var item in getAllClasses)
     {
        if (item.isActive != true)
            return "Error";

      }

     return "OK";
  }
}
0 голосов
/ 15 мая 2018

Избегайте условной логики, основанной на аргументах. Это приводит к хрупкому коду, потому что каждая комбинация параметров должна быть проверена, чтобы считаться надежной. Это приводит к сложному коду, который легко подвержен ошибкам. Наличие простых одноцелевых методов обычно намного надежнее, их легче понять и поддерживать.

Например, учитывая ваш пример и предполагая, что «rep» был DbContext вашего экземпляра ...

public bool IsActiveStudent(int id)
{
   bool result = rep.Students.Any(x => x.StudentId == id && x.IsActive);
   return result;
}
public bool IsActiveTeacher(int id)
{
   bool result = rep.Teachers.Any(x => x.TeacherId == id && x.IsActive);
   return result;
}
public bool IsActiveClass(int id)
{
   bool result = rep.Classes.Any(x => x.ClassId == id && x.IsActive);
   return result;
}

Это могут быть, по сути, однострочники, просто возвращая результат .Any (). Я склоняюсь к тому, чтобы сначала выбрать результат в переменную и вернуть его в отдельной строке, так как это облегчает определение точки останова и проверку.

Если вам нужно вернуть строку «Ok» вместо «Error», тогда:

return result ? "OK" : "Error";

Методы должны стремиться делать что-то одно и делать это хорошо. Легко понять и устранить неполадки в случае необходимости. Добавление параметров и условного кода внутри метода просто делает код более изменчивым и оставляет возможности для ошибок. В конце это не делает код намного короче, когда первоначальный метод может быть упрощен.

0 голосов
/ 15 мая 2018

Вы не можете перегружать методы, если они имеют одинаковые подписи.

У вас есть два метода с одинаковой подписью:

public string checkexist(int id)

Что вы можете сделать, это переименовать вашуметоды, как это:

public interface WriteSomethingHere { 

   public boolean isStudentExist(int id);
   public boolean isTeacherExist(int id);
   public boolean isClassExist(int id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...