3

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

ObjectContext ObjectContext {get;}

但是 DbContext 类本身没有该属性。现在:

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

这里发生了什么?

4

1 回答 1

4

这是显式接口实现的示例。

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

interface IExplicit
{
    void Explicit();
}

class Test : IExplicit
{
    void IExplicit.Explicit()
    {
     //some implementation goes here
    }
}

现在我们可以实例化一个 new Test(),但是要访问IExplicit实现,我们必须将类型转换为

var testobj = new Test();

**will throw Compile time error.
testobj.Explicit();

**We can do.
((IExplicit)testobj).Explicit();

所以现在开始你的实际实施dbcontext

DbContext 显式地实现了该属性。因此必须将实例强制转换为它的接口才能访问

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

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

于 2016-02-25T12:35:10.080 回答