我在Entity Framework中有以下代码:
using(var dbc = new TestDbContext())
{
var data = (from a in dbc.tableList
select new { a = id }).ToList();
}
当我调试代码时,我遇到了以下代码
public class TestDbContext : DbContext
{
public TestDbContext()
{
}
public DbSet<Table> tableList {get;set;}
}
我想知道甚至没有像这样创建DbSet<Table>
的实例:
public Dbset<Table> tableList = new Dbset<Table>();
我如何查询表格,例如:
in
var data = (from a in dbc.tableList
select new { a = id }).ToList();
答案 0 :(得分:4)
这对此毫无魔力。 TestDbContext
源自DbContext
DbContext
调用内部类DbSetDiscoveryService
,它使用Reflection迭代DbSet
属性并初始化它们。
EF的单声道版本,您可以在Github上找到显示InitializeSets
答案 1 :(得分:3)
在构建过程中,EF将扫描DbContext
派生对象中的任何DbSet
属性,并通过反射对其进行相应的初始化。
来自DbContext documentation上的备注部分。
DbContext
通常与派生类型一起使用,该派生类型包含模型的根实体的DbSet<TEntity>
属性。创建派生类的实例时,将自动初始化这些集。可以通过将SuppressDbSetInitializationAttribute
属性应用于整个派生的上下文类或类的各个属性来修改此行为。
如果您想知道它是如何工作的,您可以在这里看到来源:
答案 2 :(得分:1)
您继承自DbContext的TestDbContext。
我想,可能在DbContext构造函数中通过反射所有字段如DbSet<Table>
都被初始化。