【问题标题】:How come DbContext implements IObjectContextAdapter but doesn't have public ObjectContext propertyDbContext 如何实现 IObjectContextAdapter 但没有公共 ObjectContext 属性
【发布时间】:2016-06-08 04:55:10
【问题描述】:
在实体框架中,DbContext 类实现了 IObjectContextAdapter 接口。当我查看这个界面时,我看到只有一个属性
ObjectContext ObjectContext {get;}
但 DbContext 类本身没有该属性。现在:
- 它是如何工作的?编译器不应该强制 DbContext 类具有公共 ObjectContext 属性吗?
- 或者换一种说法:为什么我必须将 DbContext 强制转换为 ObjectContextAdapter 才能访问 ObjectContext 属性。
这是怎么回事?
【问题讨论】:
标签:
entity-framework
dbcontext
interface-implementation
【解决方案1】:
这是一个显式接口实现的例子。
所以要从理论上理解它,请看这个例子
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 显式实现了该属性。因此必须将实例强制转换为其接口才能访问。
public class DbContext : IObjectContextAdapter
{
ObjectContext IObjectContextAdapter.ObjectContext
{
get
{
...
}
}
}
您可以在msdn 上找到显式接口文档。