2013-10-21 36 views
1

我想开发一个基本上会有一些项目列表的多用户应用程序。每个用户正在对此列表执行一些CRUD操作。我需要用户在其他用户进行一些更改时看到列出的更改。实体框架DbContext如何从数据库(使用绑定)获取更新?

我认为绑定是我需要的,但根据msdn中的信息,DbContext是工作单元/知识库......这是否意味着DbContext无法自动从数据库中读取更新?

http://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext(v=vs.103).aspx

有没有办法让使用实体框架预期的结果?

[编辑] 是您远离数据库更新的唯一方法是使用定时器额外的代码来从数据库加载数据?这是实时应用程序的唯一选择吗?

+0

依赖于多用户的多用户应用程序是如何。有[有一些选项](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx),但它[可能不能很好地扩展](http://msdn.microsoft.com/zh-cn/library/default.aspx)。 com/en-us/library/system.data.sqlclient.sqldependency.aspx#alert_note)到几个并发用户。 –

+0

@ScottChamberlain假设这是一个呼叫中心的应用程序 - 一些用户注册用户呼叫 - >在列表中工作,其他用户正在拖拽这些作品 - >指定谁将与这些作品一起工作。用户A需要知道,用户B已经从unassigend工作列表中提取工作。什么是做到这一点的最佳选择?每隔X秒后使用计时器并刷新数据库中的数据? – Prokurors

回答

1

DataBinding意味着UI与对象之间的绑定,而不是对象与数据库的绑定。

您需要调用Reload/Refresh方法以获取最新的数据库值。 像这样: http://stackoverflow.com/questions/16872305/i-do-not-understand-how-ef5-dbcontext-entryentity-reload-method-is-supposed

(见注释)

+0

假设这是一个呼叫中心的应用程序 - 一些用户注册用户呼叫 - >在列表中工作,其他用户正在拖拽这些作品 - >指定谁将与这些作品一起工作。用户A需要知道,用户B已经从unassigend工作列表中提取工作。什么是做到这一点的最佳选择?每隔X秒后使用计时器并刷新数据库中的数据? – Prokurors

+1

通常情况下,这种情况是通过推送通知来完成的,以在没有任何事情发生时将定时器开销最小化。我会在另一边实施TCP通知和听众推送通知。这可以用任何网络protokol来完成,你只需要一个发送者和一个监听者。你也可以看看Firebird数据库他们有什么叫做服务器事件。 http://www.firebirdsql.org/file/documentation/papers_presentations/Power_Firebird_events.pdf(这是第一个谷歌链接,也许你会发现更有用的东西) –

+0

嗯......所以也许可能有一个MS SQL触发器,存储应该刷新什么信息以及客户端应用程序有一个计时器,用于检查这个小的更改信息表,以及何时有关于更改的信息 - 然后从数据库重新加载数据?你提到了firebirdsql数据库服务器,但是有解决方案可以在MS SQL数据库服务器上工作吗? – Prokurors

相关问题