实体框架监听SQL Server的变化

时间:2013-07-10 18:08:36

标签: asp.net sql-server entity-framework c#-4.0 asp.net-web-api

我正在研究以下情况:

我有一个控制台,用一些数据填充SQL Server数据库。我还有一个Web应用程序读取相同的数据库并在前端显示数据。两个应用程序都使用Entity Framework与数据库通信(它们具有相同的连接字符串)。

我想知道如何通知Web应用程序数据库发生的任何更改。请记住,两个应用程序都没有被引用。

是否有EF提供的事件会在某些事件发生变化时触发。从本质上讲,我想知道何时发生了变化,以及变化的性质

2 个答案:

答案 0 :(得分:1)

我有类似的要求,我使用EF功能解决了它:

[context].Database.CompatibleWithModel(throwIfNoMetadata: true)

如果您的模型使用元数据表与基础数据库结构匹配,它将返回。

请注意,我使用的是 Code First 方法。

msdn定义如下:

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

编辑:

刚刚发现了一篇带有演示的精彩文章:

http://blog.oneunicorn.com/2011/04/08/code-first-what-is-that-edmmetadata-table/

答案 1 :(得分:0)

这根本不是与EF有关的东西。 EF只是一个创建SQL调用并将它们映射到对象的库。它没有数据库的内部知识。因此,当一个应用程序中的数据发生更改时,另一个应用程序不会知道,除非他们查询该数据是否发生更改(并且您不会经常运行查询以了解该数据,这太不切实际了。)

可能有一些方法可以做到这一点,例如向数据库添加触发器,然后调用扩展存储过程以向应用程序发送消息,但这需要做很多工作,并且可能会有所妥协数据库的稳健性。

曾经有一种名为Notification Services的东西,但已被弃用。现在有一些叫做SqlDependency的对象,在某些情况下可能对你有所帮助..但这一切都取决于你要做的事情。

无论如何,通常更容易找到一种不同的方式来做你想做的事情。这是一个复杂的主题,真的需要很多sql server知识。

相关问题