1

在 Entity Framework 中,您必须创建一个派生自DbContextIDbSet 属性的类。Entity Framework 中的什么调用了设置器,它是如何工作的?

4

2 回答 2

4

当您的自定义上下文类被实例化时,基本DbContext构造函数调用一个名为的私有方法InitializeLazyInternalContext,该方法又调用另一个名为DiscoverAndInitializeSets.

此方法创建 a 的新实例DbSetDiscoveryService,将当前上下文作为构造函数参数传递,然后调用其InitializeSets方法。该方法依次调用GetSets,它使用反射来获取派生上下文中可分配的任何属性的列表DbSet<T>(这包括IDbSet<T>)。

然后它遍历这个集合并提供没有用 a 标记的属性SuppressDbSetInitializationAttribute,它DbSet<T>通过调用 DbContext 的Set<TEntity>方法并分配结果来分配 a 的实例。

您可以在此处DbSetDiscoveryService查看代码。

于 2012-12-06T00:17:18.503 回答
0

EF 使用反射来发现 DbContext 派生类上的 IDbSet 属性并相应地设置它们。

于 2012-12-05T23:36:47.653 回答