为什么 DbContext 实现了 IObjectContextAdapter 但没有 public ObjectContext 属性

How come DbContext implements IObjectContextAdapter but doesn't have public ObjectContext property

在entity framework中,DbContext class实现了IObjectContextAdapter接口。当我查看这个界面时,我发现只有一个 属性

ObjectContext ObjectContext {get;}

但是 DbContext class 本身没有那个 属性。现在:

  1. 它是如何工作的?编译器不应该强制 DbContext class 具有 public ObjectContext 属性 吗?
  2. 或者换句话说:为什么我必须将 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 implemented that property explicitly.So instance will have to be casted to its interface in order to be accessible.

public class DbContext : IObjectContextAdapter
{
    ObjectContext IObjectContextAdapter.ObjectContext 
    {
     get
        { 
         ... 
        }
    }
}

您可以在 msdn 上找到显式接口文档。