Entity framework 为什么DbContext实现了IObjectContextAdapter,但没有';没有公共ObjectContext属性

Entity framework 为什么DbContext实现了IObjectContextAdapter,但没有';没有公共ObjectContext属性,entity-framework,dbcontext,interface-implementation,Entity Framework,Dbcontext,Interface Implementation,在实体框架中,DbContext类实现IObjectContextAdapter接口。当我查看这个界面时,我看到只有一个属性 ObjectContext ObjectContext {get;} 但是DbContext类本身没有这个属性。现在: 它是如何工作的?编译器不应该强制DbContext类具有公共ObjectContext属性吗 或者换一种说法:为什么我必须将DbContext强制转换为ObjectContextAdapter才能访问ObjectContext属性 这里发生了什么?这是

在实体框架中,DbContext类实现IObjectContextAdapter接口。当我查看这个界面时,我看到只有一个属性

ObjectContext ObjectContext {get;}
但是DbContext类本身没有这个属性。现在:

  • 它是如何工作的?编译器不应该强制DbContext类具有公共ObjectContext属性吗
  • 或者换一种说法:为什么我必须将DbContext强制转换为ObjectContextAdapter才能访问ObjectContext属性

  • 这里发生了什么?

    这是一个显式接口实现的示例

    所以要从理论上理解它,请看这个例子

    interface IExplicit
    {
        void Explicit();
    }
    
    class Test : IExplicit
    {
        void IExplicit.Explicit()
        {
         //some implementation goes here
        }
    }
    
    现在我们可以实例化一个新的
    Test()
    ,但是要访问
    IExplicit
    实现,我们必须像

    var testobj = new Test();
    
    **will throw Compile time error.
    testobj.Explicit();
    
    **We can do.
    ((IExplicit)testobj).Explicit();
    
    现在来看一下
    dbcontext

    DbContext显式实现了该属性。因此,必须将实例强制转换到其接口才能访问该实例


    您可以在这里找到显式接口文档。

    Hmm,通过这种方式,我发现了显式接口实现的概念。非常感谢。
    public class DbContext : IObjectContextAdapter
    {
        ObjectContext IObjectContextAdapter.ObjectContext 
        {
         get
            { 
             ... 
            }
        }
    }