2016-11-29 3 views
0

Я использую RavenDb Server и Client 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 Raven в глобальном файле конфигурации или установки новой базы данных с уникальными ограничениями пучок включен с использованием API или Studio

но без подсказки, как это сделать. Я сделал некоторый поиск и найти можно как-: в студии, выберите базу данных, перейдите в меню Настройки -> Настройки базы данных, и я нашел этот конфиг:

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

и я попытался добавить этот конфиг:

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

Затем я получаю сообщение об ошибке при попытке сохранить его. В сообщении erros говорится о том, что «база данных уже создана и не может изменить или добавить пакеты» и сделать предложение, чтобы добавить эту строку "Raven-Temp-Allow-Bundles-Change": true, и я смог сохранить настройки с помощью конфигурации узла UniqueConstraint.

До сих пор я думаю, что я выполнил все требования, описанные в документации. Последний из них является:

Любой пакет, который не был добавлен в список ActiveBundles, не будет активным, даже если соответствующая сборка находится в каталоге плагинов.

Единственное место, где я нашел список пакетов, это создание новой базы данных в Studio, но список не редактируется, а только информация о том, что уже включено.

В документации написано много требований, но просто не рассказывайте нам, как это сделать, супер умный, и мы должны попробовать gess как. До сих пор я мог добраться сюда, но что? Он все еще не работает!

Мой вопрос в том, что UniqueConstraints действительно работает в RavenDb? Попросите кого-нибудь получить эту работу?

Если да, облако, пожалуйста, скажите мне, как?

Спасибо заранее!

[Изменено] Я забыл упомянуть, что я добавил последующие строки:

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

А также попытался с версии 3.5.1.

ответ

1

Проблема в том, что указанное имя пакета неверно, поэтому оно не будет активным на стороне сервера. Используйте "Unique Constraints" вместо "UniqueConstraints" в опции "Raven/ActiveBundles".