实体框架:为什么 DbContext 是一个具体类而不是抽象类?

TBL*_*L23 5 c# entity-framework dbcontext

我想知道为什么DbContext使用实体框架时的核心类是一个具体类。

事实上,我们从不直接使用这个类,只是通过继承它。

将其声明为抽象不是更清晰吗?它成为具体类的原因是什么?

Evk*_*Evk 3

只有做出这个决定的人才能肯定地告诉你。但是,请注意,没有任何行为DbContext必须由子类提供,因此如果您将其设为抽象 - 那只是因为您想防止直接使用它。但可以直接使用:

using (var ctx = new DbContext("EntityConnectionString")) {
    var errors  = ctx.Set<Error>().ToArray();
    Console.WriteLine(errors.Length);
}
Run Code Online (Sandbox Code Playgroud)

如果您传递实体连接字符串(或 app.config 中的名称) - 它可以从您的 emdx 模型构建模型(并且也可以直接在其他场景中使用)。这样您就可以像往常一样进行查询、保存更改等,而无需DbSet使用Set<T>方法声明的属性。

由于它在单独使用时不会被破坏 - 我认为没有太多理由通过使其抽象来防止这种情况发生。