实体框架ObjectStateManager未定义

时间:2013-02-22 02:41:17

标签: c# entity-framework

我有一个分布式数据库,我认为可能会更新事件触发更新,以便所有用户立即更新其数据并找到这篇不错的文章; EF Events

我从this article开始相信上下文被定义为实体容器名称,在我的情况下是#34; 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生成我的数据库,如果这有什么区别?)

2 个答案:

答案 0 :(得分:2)

CertsModelContainer是DbContext还是ObjectContext?只有后者有一个ObjectStateManager。

如果您使用的是交易,则可以使用Transaction.TransactionCompleted

答案 1 :(得分:1)

如果您的CertsModelContainer是DbContext,您可以将其强制转换为IObjectContextAdapter以访问ObjectStateManager。

例如:

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));
    };
}