在Entity Framework中,您必须创建一个使用IDbSet属性从DbContext
派生的类。实体框架中的内容调用了setter以及它是如何工作的?
答案 0 :(得分:3)
当您的自定义上下文类被实例化时,基础DbContext
构造函数会调用名为InitializeLazyInternalContext
的私有方法,该方法又调用另一个名为DiscoverAndInitializeSets
的私有方法。
此方法创建DbSetDiscoveryService
的新实例,将当前上下文作为构造函数参数传递,然后调用其InitializeSets
方法。此方法依次调用GetSets
,它使用反射来获取派生上下文中可从DbSet<T>
分配的任何属性的列表(包括IDbSet<T>
)。
然后循环遍历此集合并提供该属性未标记SuppressDbSetInitializationAttribute
,它通过调用DbContext的DbSet<T>
方法并分配结果来分配Set<TEntity>
的实例
您可以查看DbSetDiscoveryService
代码here。
答案 1 :(得分:0)
EF使用反射来发现DbContext派生类的IDbSet属性并相应地设置它们。