Asp.net 侦听SQL Server更改的实体框架
我正在处理以下场景: 我有一个控制台,它用一些数据填充SQL Server数据库。我还有一个web应用程序可以读取相同的数据库并在前端显示数据。这两个应用程序都使用实体框架与数据库通信(它们具有相同的连接字符串) 我想知道如何通知web应用程序数据库发生的任何更改。请记住,无论如何,这两个应用程序都没有被引用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
是否有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服务,并使用控制台应用程序调用它。对不起,我应该说得更清楚。非常感谢,我会尽力听从你的建议。事实上,我希望这是一项更容易的任务。但是以防万一,谢谢你提供的信息。