【发布时间】:2010-05-30 14:56:35
【问题描述】:
有没有办法让datagrid监听数据库并在数据库数据发生变化时自动更新数据?我使用 SQL Server 数据库。
如果可能,我想使用 Linq-2-SQL
【问题讨论】:
标签: c# sql-server silverlight datagrid wcf-ria-services
有没有办法让datagrid监听数据库并在数据库数据发生变化时自动更新数据?我使用 SQL Server 数据库。
如果可能,我想使用 Linq-2-SQL
【问题讨论】:
标签: c# sql-server silverlight datagrid wcf-ria-services
因为@Slaggg 问:有相当简单的方法可以做到这一点,但几乎可以肯定它们会涉及大量编码,它会显着影响性能,我强烈怀疑它会更多麻烦大于它的价值。
也就是说,对于典型的 n 层应用程序,您需要非常高的层次:
(1) 一种在数据发生变化时通知中间层的方法。您可以在每个表中使用自定义代码触发器来触发某种通知(可能使用 WCF 和 CLR 存储过程),或者您可以使用 SqlDependency 对象。可能第二个会更好。
(2) 一种通知连接到该中间层的每个客户端的方法。假设您使用的是 WCF,您将需要使用其中一种可用的双工绑定,例如 Net.TCP 或 HttpPollingDuplex(用于 Silverlight)。您需要确保在客户端和服务器上都正确配置了此项。您还需要手动跟踪哪些客户端可能对更新感兴趣,这样您就可以知道要更新哪些客户端,并且您需要能够在它们消失或超时时将它们从该列表中删除。来自 MS WCF 团队的 Tomek 在他的 blog 上提供了一些您可能想要调查的非常好的示例。
(3) 一旦您从中间层收到更改通知,就会更新本地客户端的模型和/或视图模型和/或 UI 的机制。这比您想象的要复杂得多:在正常情况下使您的 UI 与您的数据模型保持同步已经很困难了,但是当您的数据模型也可以从另一个方向改变时,它会变得更加复杂。
这类通知背后的想法很简单:但正确处理所有细节可能会让您一直调试到深夜。两年后必须支持这一切的人会诅咒你的名字。
希望这会有所帮助。
【讨论】:
这取决于您从哪里更新数据库:
【讨论】: