1

Я искал некоторую помощь в том, как реализовать предложение IN в шаблоне репозитория. Вместо того, чтобы делать одиночный вызов для каждой записи, у меня будет набор идентификаторов, передайте эти идентификаторы в контекст, чтобы получить объекты, которые удовлетворяют условию с использованием шаблона репозитория с EF.Структура Entity с элементом IN в шаблоне репозитория

Я знал, что мы можем иметь что-то вроде этого:

context.Students.Where(x => StudentIDs.contains(x.ID)) 

Как реализовать же в хранилище слой или шаблон с одного вызова к БД?

+0

Просто выставить IQueryable. – Aron

+0

И как этот контекст.Students.Where (x => StudentIDs.contains (x.ID)) конфликтует с шаблоном репозитория? – mr100

ответ

0

Если вы действительно пурист, да, вы должны полностью абстрагировать DbContext, как вы, кажется, подразумеваете.

Я не уверен, я полностью понимаю вопрос, но что-то подобное, что должно сделать работу:

namespace EFRepo 
{ 
    class Student 
    { 
     public long Id { get; set; } 
     public string Name { get; set; } 
    } 

    class SchoolContext : DbContext 
    { 
     public DbSet<Student> Students { get; set; } 
    } 

    class SchoolRepository 
    { 
     private SchoolContext context = new SchoolContext(); 

     public Student Add(string name) 
     { 
      Student student = new Student { Name = name }; 

      context.Students.Add(student); 

      context.SaveChanges(); 

      return student; 
     } 

     public IEnumerable<Student> GetStudentsByIds(IEnumerable<long> ids) 
     { 
      return context.Students.Where(x => ids.Contains(x.Id)); 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      SchoolRepository repo = new SchoolRepository(); 

      repo.Add("Bully"); 
      repo.Add("Crawler"); 
      repo.Add("Tart"); 

      foreach (Student s in repo.GetStudentsByIds(new[] { 1L, 3 })) 
      { 
       Console.WriteLine(s.Name); 
      } 
     } 
    } 
}