Ошибка индексов RavenDB "Не удалось найти именованный индекс" - PullRequest
3 голосов
/ 29 марта 2012

Я новичок в использовании RavenDB и пытаюсь заставить индексы работать в простом приложении MVC3, которое позволяет пользователям вводить географические местоположения.У меня есть две модели, UserModel и LocationModel.LocationModel сохраняет идентификатор пользователя при сохранении, и я пытаюсь создать индекс для этого.

public class Locations_ByUser : AbstractIndexCreationTask<LocationModel>
    {
        public Locations_ByUser()
        {
            Map = locations => from location in locations
                            select new { location.UserId };

        }
    }

Я регистрирую индекс со следующим кодом

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);

            //ADD THE MODEL BINDER FOR LIST TO STRING
            ModelBinders.Binders.Add(typeof(TestAPI.Models.LocationModel), new TestAPI.Classes.LocationModelBinder());

            //INIT THE STORE, DO ONCE PER APP START
            TestAPI.Classes.DataDocumentStore.Initialize(); 

            //SET THE INDEXES
            IndexCreation.CreateIndexes(typeof(Locations_ByUser).Assembly, TestAPI.Classes.DataDocumentStore.Instance);
        }

Однако, когда я пытаюсьдля вызова индекса из приложения mvc

[HttpGet]
        public ActionResult Index()
        {

            var result = this.DocumentSession.Query<LocationModel>("Locations_ByUser").ToList();
            foreach (var userid in result)
            {
                Console.Out.WriteLine(userid);
            }

            return View();
        }

возвращается следующая ошибка

Не удалось найти индекс с именем: Locations_ByUser

Мне было интересноесли кто-то еще сталкивался с этим раньше и мог бы указать мне правильное направление.Заранее спасибо.

1 Ответ

5 голосов
/ 29 марта 2012

Индекс в RavenDB будет фактически называться: "Locations / ByUser", когда он генерируется.

Если вы откроете Raven Studio, вы увидите это под индексом. _ Заменяется на /

Также вам не нужно указывать строковое значение, вы можете написать свой запрос как:

var result = this.DocumentSession.Query<LocationModel, Locations_ByUser>().ToList();
...