为什么 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 本身没有那个 属性。现在:
- 它是如何工作的?编译器不应该强制 DbContext class 具有 public 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 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 上找到显式接口文档。
在entity framework中,DbContext class实现了IObjectContextAdapter接口。当我查看这个界面时,我发现只有一个 属性
ObjectContext ObjectContext {get;}
但是 DbContext class 本身没有那个 属性。现在:
- 它是如何工作的?编译器不应该强制 DbContext class 具有 public 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 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 上找到显式接口文档。