我正在寻找有关如何在存储库模式中实现IN
子句的一些帮助。我不会对每个记录进行单个调用,而是使用一组ID,将此ID传递给Context,以使用具有EF的存储库模式来获取满足条件的实体。
我知道我们可以拥有这样的东西:
context.Students.Where( x => StudentIDs.contains(x.ID))
如何通过单次调用DB在存储库层或模式中实现它?
答案 0 :(得分: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);
}
}
}
}