gpt4 book ai didi

entity-framework - 为什么 DbContext 实现了 IObjectContextAdapter 但没有公共(public) ObjectContext 属性

转载 作者:行者123 更新时间:2023-12-01 12:29:31 26 4
gpt4 key购买 nike

在 Entity Framework 中,DbContext类实现了IObjectContextAdapter接口(interface)。当我查看这个界面内部时,我发现只有一个属性

ObjectContext ObjectContext {get;}

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

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

这是怎么回事?

最佳答案

这是一个显式接口(interface)实现的例子。

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

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
{
...
}
}
}

您可以在此处找到显式接口(interface)文档 msdn .

关于entity-framework - 为什么 DbContext 实现了 IObjectContextAdapter 但没有公共(public) ObjectContext 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35626922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com