0

我有一个分布式数据库,我认为在更新时触发事件可能会很好,以便所有用户立即更新他们的数据并找到这篇不错的文章;英孚活动

我从这篇文章中相信上下文被定义为实体容器名称,在我的例子中是“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,则可以将其强制转换为 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));
    };
}
于 2013-03-08T18:46:40.240 回答