【问题标题】: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 类本身没有该属性。现在:

  1. 它是如何工作的?编译器不应该强制 DbContext 类具有公共 ObjectContext 属性吗?
  2. 或者换一种说法:为什么我必须将 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 上找到显式接口文档。

    【讨论】:

    • 嗯,这样我发现有一个显式接口实现的概念。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2011-10-16
    相关资源
    最近更新 更多