我有一个分布式数据库,我认为可能会更新事件触发更新,以便所有用户立即更新其数据并找到这篇不错的文章; 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生成我的数据库,如果这有什么区别?)
答案 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));
};
}