對於始終保持實體框架中數據完整性的最佳方法,是否有共識?即添加或刪除實體時,如何確保加載的模型是最新的,並且我背後的數據庫沒有任何變化?實體框架中的數據完整性
在大多數情況下,似乎適用於我的粗略方法是在會話之間重新加載上下文,即不具有持久性模型,並在發生錯誤時重新加載/刷新。這似乎適用於數據衝突較少的情況,但是如果在不同的服務中發生大量變化,則代價非常高。是否有一個標誌可以查詢磁盤上的數據/行是否發生了變化或者是否使事件自動刷新,即更新某些表/行的任何訂戶?
對於始終保持實體框架中數據完整性的最佳方法,是否有共識?即添加或刪除實體時,如何確保加載的模型是最新的,並且我背後的數據庫沒有任何變化?實體框架中的數據完整性
在大多數情況下,似乎適用於我的粗略方法是在會話之間重新加載上下文,即不具有持久性模型,並在發生錯誤時重新加載/刷新。這似乎適用於數據衝突較少的情況,但是如果在不同的服務中發生大量變化,則代價非常高。是否有一個標誌可以查詢磁盤上的數據/行是否發生了變化或者是否使事件自動刷新,即更新某些表/行的任何訂戶?
您可能需要樂觀的併發性。在提交之前,EF可以自動檢查數據的任何更改,並且如果數據在當前上下文之外發生更改,則會引發異常。請參閱http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application
您可以在EF中使用併發功能做一些很酷的事情。
具體而言,我有一個屬性HandleConcurrencyExceptionAttribute,您可以在MVC項目中使用它來自動掛鉤實體框架將拋出的DbConcurrencyException。 https://github.com/adamtuliper/EF5-for-Real-Web-Applications
如果您使用的是網頁表單(或win forms/wpf),您將不得不手動檢查它。搜索web表單項目DbConcurrencyException
所以基本上:
[Timestamp] public byte[] Timestamp { get; set; }
如果你想看到它在行動看到我的視頻的結尾:http://channel9.msdn.com/Events/TechEd/NorthAmerica/2012/DEV215 我談論併發短暫和有一個快速演示。
對於你的問題的第二部分,存在的SqlCacheDependency類 http://msdn.microsoft.com/en-us/library/ms178604(v=vs.100).aspx 還有最近在MSDN一篇關於這一點。
非常感謝,將看看這個 – aggaton
OC爲+1。您還應該考慮工作單元模式,它補充了管理使用的上下文生命週期的最佳方法。 http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx – Nick
謝謝一堆將看看這個 – aggaton