我正在处理以下场景:
我有一个控制台,它用一些数据填充 SQL Server 数据库。我还有一个 Web 应用程序可以读取相同的数据库并在前端显示数据。这两个应用程序都使用实体框架与数据库进行通信(它们具有相同的连接字符串)。
我想知道如何通知网络应用程序数据库发生的任何更改。请记住,无论如何都没有引用这两个应用程序。
是否有 EF 提供的事件在某些发生更改时触发。本质上,我想知道什么时候发生了变化,以及变化的性质
我正在处理以下场景:
我有一个控制台,它用一些数据填充 SQL Server 数据库。我还有一个 Web 应用程序可以读取相同的数据库并在前端显示数据。这两个应用程序都使用实体框架与数据库进行通信(它们具有相同的连接字符串)。
我想知道如何通知网络应用程序数据库发生的任何更改。请记住,无论如何都没有引用这两个应用程序。
是否有 EF 提供的事件在某些发生更改时触发。本质上,我想知道什么时候发生了变化,以及变化的性质
我有类似的要求,我使用 EF 函数解决了它:
[context].Database.CompatibleWithModel(throwIfNoMetadata: true)
如果您的模型使用元数据表匹配底层数据库结构,它将返回。
请注意,我使用的是Code First方法。
msdn定义如下:
编辑:
刚刚发现一篇带有演示的精彩文章:
http://blog.oneunicorn.com/2011/04/08/code-first-what-is-that-edmmetadata-table/
这根本与 EF 无关。EF 只是一个进行 SQL 调用并将它们映射到对象的库。它没有数据库的内部知识。因此,当一个应用程序中的数据发生更改时,另一个应用程序不知道,除非他们查询以查看该数据是否更改(而且您不会不断地运行查询来知道这一点,这太不切实际了)。
可能有一些方法可以做到这一点,例如向数据库添加触发器,然后调用扩展存储的过程来向应用程序发送消息,但这需要做很多工作,并且可能会损害数据库。
曾经有一种叫做通知服务的东西,但它已被弃用。现在有一些称为 SqlDependency 对象的东西,它在某些情况下可能会对您有所帮助..但这完全取决于您要做什么。
无论如何,通常更容易找到一种不同的方式来做你想做的事。这是一个复杂的话题,确实需要大量的 sql server 知识。