2012-02-23 36 views
2

我想在嵌入式RavenDB中使用asp MVC,但是看起來數據庫在調試MVC應用程序(使用VS 2010和IIS 7.5 Express)時沒有反應。對於MVC動作中的示例,我寫下一個對象,嘗試在下一步從數據庫中讀取它,但直到下一個請求才找到該對象。對我來說,看起來如果MVC應用程序處於空閒狀態,嵌入式RavenDB只能監聽請求。嵌入RavenDB和MVC可能嗎?

如果我從嵌入式更改爲正常的客戶端/服務器,它沒有問題。我寧願使用嵌入式RavenDB。也許有人對這個問題有一些經驗?

回答

2

的內存數據庫需要時間做的事情,所以你可能會得到過時結果。

從這個問題的nostalequerieslistener應該有所幫助:RavenDB how to flush?

我曾就此問題與單元測試,bascially而RavenDB在內存中是速度快,代碼插入和查詢對象之間的少量更快。

+0

謝謝你看起來像這是主要問題。 – user1176603 2012-02-25 11:26:35

+0

我不明白爲什麼這應該是專門針對嵌入式的實例?除此之外 - 請注意,NoStaleQueriesListener是您可以做的最糟糕的事情之一,因爲它幾乎消除了文檔數據庫的所有好處,而且更糟的是,它可以打破整個應用程序的糟糕表現 – 2012-02-25 12:32:24

+0

@DanielLang Easy。在嵌入式數據庫的情況下,在客戶端和服務器之間的延遲0。甚至1ms的延遲,這是一個很大的工作RavenBD的能完成。它增加了高達每往返2ms的,不包括的時間實際上做通信的點點。此外,由於嵌入式共享資源更緊密地與應用程序多,應用可能去使用保存更改並確保它的存在之前RavenDB可以做更多的事情之間的微小時間。 – Rangoric 2012-02-25 13:08:10

1

RavenDB實現Unit Of Work模式。完成後,您是否在文檔會話中調用SaveChanges

+0

是的,我make session.SaveChanges();和session.Dispose(); – user1176603 2012-02-23 14:12:29

+1

很奇怪。我使用嵌入式版本沒有任何問題。確保在更改某些內容時確實調用了'SaveChanges()'。 – jgauffin 2012-02-23 14:17:26

2

您可以使用嵌入RavenDB沒有任何缺點,除了您創建EmbeddableDocumentStore時,您的應用程序啓動需要更長的時間,但沒有什麼可擔心的。

你應該記住的唯一事情是,儘管你可以無縫地從嵌入式切換到客戶端/服務器,但是(很少)有些情況下,如果不修改代碼就無法轉到其他方式。例如,懶惰功能在嵌入式會話中不可用,因爲在那裏沒有意義。

+0

如果你在調試mvc應用程序(localhost:53996),你可以在不同的端口(localhost:8080)上輸入RavenDB-Web-Interface嗎?我在調試mvc應用程序時無法進入RavenDB-Web-Interface?!我遵循這個頁面的說明http://www.primaryobjects.com/CMS/Article125.aspx(但我拿嵌入的RavenDB)。 – user1176603 2012-02-23 14:31:21

+0

是的,只需將UseEmbeddedHttpServer設置爲true並根據需要設置端口即可。 – 2012-02-23 17:18:43

+0

多數民衆贊成在奇怪,我將建立一個新的項目,並再次檢查,也許我有一個配置問題。 – user1176603 2012-02-23 18:18:18

2

您可以輕鬆整合。這可能有幫助。 http://msdn.microsoft.com/en-us/magazine/hh547101.aspx

如果解決了您的問題,請標記爲答案。

+0

我下載了本教程的代碼並對其進行了修改,以便在創建操作之前先插入書籤,然後再查詢數據庫。儘管添加了新項目,但這兩個查詢都返回空列表。首先我認爲這是一個緩存問題,用WaitForNonStaleResultsAsOfLastWrite這個問題似乎解決了。 – user1176603 2012-02-25 11:20:57