3

エンティティ フレームワークでは、DbContext クラスは IObjectContextAdapter インターフェイスを実装します。このインターフェイスの中を見ると、プロパティが 1 つしかないことがわかります

ObjectContext ObjectContext {get;}

しかし、DbContext クラス自体にはそのプロパティがありません。今:

  1. それはどのように機能しますか?コンパイラは DbContext クラスに public ObjectContext プロパティを強制するべきではありませんか?
  2. 別の言い方をすれば、ObjectContext プロパティにアクセスするために DbContext を ObjectContextAdapter にキャストする必要があるのはなぜですか。

何が起きてる?

4

1 に答える 1

4

これは、明示的なインターフェイスの実装の例です。

したがって、理論的に理解するには、この例を参照してください

interface IExplicit
{
    void Explicit();
}

class Test : IExplicit
{
    void IExplicit.Explicit()
    {
     //some implementation goes here
    }
}

これで new をインスタンス化できます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で明示的なインターフェイスのドキュメントを見つけることができます。

于 2016-02-25T12:35:10.080 に答える