2013-07-10 81 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知識。

相關問題