0

私は分散データベースを持っており、すべてのユーザーがデータをすぐに更新してこの素晴らしい記事を見つけられるように、更新時にイベントを発生させるとよいと思いました。EFイベント

この記事から、コンテキストはエンティティコンテナ名(私の場合は「CertsModelContainer」)として定義されていると思います。

しかし、私が試してみると、

using (CertsModelContainer db = new CertsModelContainer())
{
    db.ObjectStateManager.ObjectStateManagerChanged += (sender, e) =>
    {
        Console.WriteLine(string.Format(
            "ObjectStateManager.ObjectStateManagerChanged | Action: {0}, Object: {1}",
            e.Action,
            e.Element));
    };
}

Visual Studioから、CertsModelContainerに「ObjectStateManager」の定義が含まれていないことが通知されます

なぜこれが起こっているのか、そしてそれを修正する方法がわかりません、誰かが私を助けることができますか?
(私はEF5を使用しており、ModelFirstを使用してデータベースを生成しましたが、違いがありますか?)

4

2 に答える 2

2

CertsModelContainerはDbContextまたはObjectContextですか?後者だけがObjectStateManagerを持っています。

トランザクションを使用している場合は、Transaction.TransactionCompletedを使用できます。

于 2013-02-22T02:45:38.310 に答える
1

CertsModelContainerがDbContextの場合、ObjectStateManagerにアクセスするためにそれをIObjectContextAdapterにキャストできます。

例えば:

using (CertsModelContainer db = new CertsModelContainer())
{
    ((IObjectContextAdapter)db).ObjectStateManager.ObjectStateManagerChanged += (sender, e) =>
    {
        Console.WriteLine(string.Format(
            "ObjectStateManager.ObjectStateManagerChanged | Action: {0}, Object: {1}",
            e.Action,
            e.Element));
    };
}
于 2013-03-08T18:46:40.240 に答える