Entity framework 为什么DbContext实现了IObjectContextAdapter,但没有';没有公共ObjectContext属性
在实体框架中,DbContext类实现IObjectContextAdapter接口。当我查看这个界面时,我看到只有一个属性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属性 这里发生了什么?这是
ObjectContext ObjectContext {get;}
但是DbContext类本身没有这个属性。现在:
这里发生了什么?这是一个显式接口实现的示例 所以要从理论上理解它,请看这个例子
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
{
...
}
}
}