首先使用EF数据库,是否可以创建其中一个类的副本,以便使用额外的过滤器返回任何查询?
作为一个例子:给定一个类
public partial class Person
{
public Person()
{
this.Job= new HashSet<Appointments>();
}
public int PersonID { get; set; }
public int JobID { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public virtual ICollection<Appointments> Appointments { get; set; }
}
是否可以以某种方式构建类的副本,其功能类似于现有类,但仅返回应用的结果&#34;其中Forename =&#39; David&#39;)
我无法覆盖现有的课程(这两种情况都需要保留,并且无论如何都会被覆盖)
我的第一个想法是简单地创建一个单独的静态类,其方法返回IQueryable&lt;人员&gt;,但稍后再说,上下文已被处理 - 我不认为你可以将它附加到新的上下文?
答案 0 :(得分:2)
您可以做的最好的事情是向DbContext
中的partial class
添加一项功能,该功能会返回已应用过滤器的IQueryable<Persons>
。
部分类应与实际上下文类具有相同的名称。部分类中的任何代码都将与Database-First生成的类合并,就好像它们位于同一文件中一样。如果重新生成上下文,它也不会被代码生成器触及或覆盖。您可以使用相同的概念来扩展所有类型的代码生成的类(这正是为partial
类设计的用例类型。)
public partial class MyDbContext
{
public IQueryable<Persons> FilteredPersons()
{
return this.Persons.Where(p => p.Forename =="David");
}
}
然后你可以这样称呼它:
using (var myContext = new MyDbContext())
{
var query = myContext.FilteredPersons().Where(...some additional filter...);
var results = query.ToList();
}
你可能还可能使用IDBCommandInterceptor
进行操作,但这会很大,很丑陋,很丑陋,并且超出了这样一个简单答案的范围。