2016-11-29 49 views
0

我正在使用RavenDb服務器和客戶端3.5.0,我試圖讓UniqueConstraint工作沒有成功。RavenDb UniqueConstraint不起作用

的簡單情況:

using Raven.Client.UniqueConstraints; 
public class User { 
    public string Id { get; set; } 
    [UniqueConstraint] 
    public string Email { get; set; } 
} 

文檔說:

降Raven.Bundles.UniqueContraints裝配在插件 目錄。

我做到了通過的NuGet:Install-Package RavenDB.Bundles.UniqueConstraints -Version 3.5.0 並粘貼二進制Raven.Bundles.UniqueConstraints.dll到文件夾插件,我創造了自己在烏鴉的根目錄。

保存用戶的文檔後,我得到這個元數據:

"Ensure-Unique-Constraints": [ 
     { 
      "Name": "Email", 
      "CaseInsensitive": false 
     } 
    ] 

一切似乎工作,但我仍然保存與相同的電子郵件文件。

UniqueConstraintCheckResult<User> checkResult = session.CheckForUniqueConstraints(user); 

        // returns whether its constraints are available 
        if (checkResult.ConstraintsAreFree()) 
        { 
         session.Store(user); 
         session.SaveChanges(); 
        } 

我檢查此鏈接RavenDB UniqueConstraint doesn't seem to work而這一次https://groups.google.com/forum/#!searchin/ravendb/unique|sort:relevance/ravendb/KzO-eIf9vV0/NJyJ4DNniFUJ和許多其他人有沒有解決同樣的問題。在某些情況下,他們表示正在檢查該屬性是否已經存在於數據庫中,作爲解決方案。

的文件也說:

要激活唯一約束服務器範圍內,只需用獨特 約束添加獨特 約束烏鴉/ ActiveBundles配置全球 配置文件中,或設置一個新的數據庫捆綁打開使用API​​或工作室

但沒有線索如何做到這一點。我做了一些搜索,找到一個可能的方法如下: 在Studio中,選擇數據庫,進入設置 - >數據庫設置,我發現這個配置:

{ 
    "Id": "TestRaven", 
    "Settings": { 
     "Raven/DataDir": "~\\TestRaven" 
    }, 
    "SecuredSettings": {}, 
    "Disabled": false 
} 

,我嘗試添加該配置:

"Settings": { 
     "Raven/DataDir": "~\\TestRaven", 
     "Raven/ActiveBundles": "UniqueConstraints" 
} 

然後在嘗試保存時出現錯誤。消息錯誤表示類似於「數據庫已創建並且無法修改或添加捆綁包」,並進行消減以添加此行"Raven-Temp-Allow-Bundles-Change": true,並且我能夠使用UniqueConstraint包配置保存de設置。

到目前爲止,我認爲我確實需要文檔描述。最後一個是:

不添加到ActiveBundles列表中的任何包,將不會 活躍,即使相關組件在Plugins目錄。

我發現捆綁列表的唯一地方是在Studio中創建新數據庫,但該列表不可編輯,只是關於已啓用的信息。

該文件說明了很多要求,但只是不告訴我們該怎麼做,超級聰明,我們必須嘗試如何。到目前爲止,我可以到達這裏,但是什麼?它仍然不工作!

我的問題是,UniqueConstraints真的在RavenDb中工作?有人得到這個工作?

如果是,雲請告訴我怎麼做?

預先感謝您!

[編輯] 我忘了提,我添加了如下一行:

store.Listeners.RegisterListener(new UniqueConstraintsStoreListener()); 

而且也試圖與3.5.1版本。

回答

1

問題是指定的捆綁包名稱不正確,所以它在服務器端不會處於活動狀態。請使用"Unique Constraints"而不是"UniqueConstraints"中的"Raven/ActiveBundles"設置選項。