2013-07-10 82 views
1

我正在处理以下情形:实体框架监听SQL Server更改

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

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

是否有EF提供的事件,当某些事件发生变化时触发。从本质上讲,我想知道什么时候改变已经发生的事情,以及,这种变化

回答

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/

+0

哦,那很完美。非常感谢。但你将如何去寻找实际的变化。就像,你可以达到特定表(甚至记录)更改的粒度。 – ppoliani

+0

我很确定你可以,但是每当我发现一个不兼容的模型时,我只是重新创建了数据库或我的实体模型。所以我真的不知道你怎么能看到变化本身。 – gustavodidomenico

+0

正确的如果我错了,但我认为这个CompatibleWithModel将返回false,如果模型的结构已经改变(例如一个属性被添加),而不是实际值。 – ppoliani

0

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

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

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

无论如何,通常更容易找到不同的方式来做你想做的事。这是一个复杂的话题,并且确实需要大量的SQL Server知识。

相关问题