【问题标题】:What happens when i instantiate a class derived from EF DbContext?当我实例化从 EF DbContext 派生的类时会发生什么?
【发布时间】:2015-12-11 02:06:31
【问题描述】:

TL;DR;
你能总结一下当我实例化一个扩展 EF DbContext 的类实例时会发生什么吗???


我想尽可能多地了解它,并且由于对接口和抽象类的各种引用,仅阅读源代码并不是很有效率...

我希望通过一步一步,我能够更轻松地确定正在处理的部分......

我想为这个项目做出贡献,我想对一切有一个全面的了解......

那么,你能描述一下当我实例化一个像下面这样的类时会发生什么吗?:

public class ProductContext : DbContext
{
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
}

编辑 1
让我举例说明我正在寻找的答案,以“启动汽车”为例:
首先将钥匙插入插座。转动钥匙实际上是一个 3 步动作。当您稍微转动一下,确认钥匙适合锁并由内部电池供电时,汽车启动电气系统,计算油量,关闭外部灯(如刹车灯和前灯),关闭 A/C并恢复内部电动发动机的所有动力,这将转动主发动机。
如果你再转动一点,同步系统将与气泵和电动发动机一起启动,导致曲轴旋转并使活塞运动,这是常规操作的反向模式。如果任何齿轮被“设置”,汽车就会移动,主发动机启动将失败。否则,气泵将在活塞腔内喷射气体,同步系统将产生火花,探索气体并启动主机。之后,电动机将停止,变压器将开始工作,为主电池补充能量。
如果同步系统和气泵继续正常工作,活塞中的点火将继续以 4 个循环的方式发生,汽车将准备好行驶。不然车会死,整个过程可以重复。

现在请注意,虽然没有注明“完整”和“技术”的各个点,例如机油、水冷、发动机的机械内部结构、齿轮箱等......但如果你有能力这样做请做!

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    我不太确定您在寻找什么,但也许这些信息会有所帮助。当您实例化 DbContext 类时,构造函数会调用一个私有方法来初始化 DbSet 属性。它通过使用名为DbSetDiscoveryService 的内部类通过反射发现当前类中的DbSet 属性来实现这一点。

    一些有用的链接:

    • 关于 SO here 的类似问答。
    • Here 是指向该 DbSetDiscoveryService 类的链接。
    • Here 是指向实体框架源代码的链接。

    【讨论】:

    • 这很有帮助,但深度不够我需要......或者至少,希望......
    • @Leonardo 有什么我可以回答的具体问题吗?可以访问源代码意味着您可以随心所欲地深入。
    • 正如我在长版中提到的那样,代码不容易阅读和理解......即使您熟悉项目,找出代码背后的“意图”也不是一件容易的事...... . 我编辑了我的帖子...检查一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2016-11-23
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多