Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 侦听SQL Server更改的实体框架_Asp.net_Sql Server_Entity Framework_C# 4.0_Asp.net Web Api - Fatal编程技术网

Asp.net 侦听SQL Server更改的实体框架

Asp.net 侦听SQL Server更改的实体框架,asp.net,sql-server,entity-framework,c#-4.0,asp.net-web-api,Asp.net,Sql Server,Entity Framework,C# 4.0,Asp.net Web Api,我正在处理以下场景: 我有一个控制台,它用一些数据填充SQL Server数据库。我还有一个web应用程序可以读取相同的数据库并在前端显示数据。这两个应用程序都使用实体框架与数据库通信(它们具有相同的连接字符串) 我想知道如何通知web应用程序数据库发生的任何更改。请记住,无论如何,这两个应用程序都没有被引用 是否有EF提供的事件在某些更改时触发。本质上,我想知道什么时候发生了变化,以及变化的性质我有一个类似的要求,我使用EF函数解决了它: [context].Database.Compatib

我正在处理以下场景:

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

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


是否有EF提供的事件在某些更改时触发。本质上,我想知道什么时候发生了变化,以及变化的性质

我有一个类似的要求,我使用EF函数解决了它:

[context].Database.CompatibleWithModel(throwIfNoMetadata: true)
如果您的模型与使用元数据表的基础数据库结构匹配,它将返回

请注意,我使用的是代码优先的方法

msdn的定义如下:

编辑:

刚刚发现一篇精彩的文章,其中有一个演示:


我有一个类似的需求,我使用EF函数解决了它:

[context].Database.CompatibleWithModel(throwIfNoMetadata: true)
如果您的模型与使用元数据表的基础数据库结构匹配,它将返回

请注意,我使用的是代码优先的方法

msdn的定义如下:

编辑:

刚刚发现一篇精彩的文章,其中有一个演示:


这与环境足迹无关。EF只是一个进行SQL调用并将它们映射到对象的库。它没有数据库的内部知识。因此,当一个应用程序中的数据发生变化时,另一个应用程序不知道,除非他们查询数据是否发生变化(而且你不会经常运行查询来知道这一点,这太不切实际了)

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

以前有一种叫做NotificationServices的东西,但现在已经不推荐了。现在有一种叫做SqlDependency对象的东西,在某些情况下可能会对您有所帮助。。但这完全取决于你到底想做什么


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

这与EF无关。EF只是一个进行SQL调用并将它们映射到对象的库。它没有数据库的内部知识。因此,当一个应用程序中的数据发生变化时,另一个应用程序不知道,除非他们查询数据是否发生变化(而且你不会经常运行查询来知道这一点,这太不切实际了)

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

以前有一种叫做NotificationServices的东西,但现在已经不推荐了。现在有一种叫做SqlDependency对象的东西,在某些情况下可能会对您有所帮助。。但这完全取决于你到底想做什么


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

哦,太好了。谢谢。但是,你将如何定位实际的变化呢。比如,你能达到特定表(甚至记录)更改的粒度吗?我很确定你能做到,但每当我发现一个不兼容的模型时,我就重新创建数据库或实体模型。所以我真的不知道你怎么能看到更改本身。如果我错了,请更正,但如果模型的结构已更改(例如,添加了属性),而不是实际值,则此CompatibleWithModel将返回false。对不起,但对我来说,当你指的是数据库更改时,你指的是架构;/。查看数据是否已更改的最佳解决方案是在应用程序中承载WCF服务,并使用控制台应用程序调用它。对不起,我应该说得更清楚。非常感谢,我会尽力听从你的建议。事实上,我希望这是一项更容易的任务。但以防万一,谢谢你的信息。哦,太好了。谢谢。但是,你将如何定位实际的变化呢。比如,你能达到特定表(甚至记录)更改的粒度吗?我很确定你能做到,但每当我发现一个不兼容的模型时,我就重新创建数据库或实体模型。所以我真的不知道你怎么能看到更改本身。如果我错了,请更正,但如果模型的结构已更改(例如,添加了属性),而不是实际值,则此CompatibleWithModel将返回false。对不起,但对我来说,当你指的是数据库更改时,你指的是架构;/。查看数据是否已更改的最佳解决方案是在应用程序中承载WCF服务,并使用控制台应用程序调用它。对不起,我应该说得更清楚。非常感谢,我会尽力听从你的建议。事实上,我希望这是一项更容易的任务。但是以防万一,谢谢你提供的信息。