没有名为的指数:TicketsByPaymentTotal

时间:2014-01-21 06:48:43

标签: indexing ravendb

我已经编写了一个用于创建索引的代码,但是当我运行应用程序并尝试调用它时,则会出现“没有指定索引”的错误。我的代码如下:

我为索引创建创建了一个类,如:

 public class TicketsByPaymentTotal : AbstractIndexCreationTask<Tickets,TicketTotal>
    {
        public TicketsByPaymentTotal()
        {
            Map = docs => from doc in docs
                          select new
                          {
                              TicketId = doc.TicketData.ID,
                              TicketTotalVal = doc.TicketData.PaymentTotal,
                              TotalVal = doc.TicketData.Total
                          };
            Reduce = results => from result in results
                                group result by result.TicketId
                                    into g
                                    select new
                                    {
                                        TicketId = g.Key,
                                        TicketTotalVal = g.Sum(x => x.TicketTotalVal),
                                        TotalVal = g.Sum(x => x.TotalVal)
                                    };
        }
    } 

我正在global.asax文件中创建索引,如:

public class MvcApplication : System.Web.HttpApplication
    {
        public IDocumentSession DocSession;
        //DocumentStore store = new DocumentStore{ConnectionStringName="RavenDB2",DefaultDatabase="Dinerware"};

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


            DataDocumentStore.Initialize();
            DocSession = DataDocumentStore.Instance.OpenSession("Dinerware");
            RegisterRoutes(RouteTable.Routes);
            //store.Initialize();
            HandlerConfig.RegisterHandlers(GlobalConfiguration.Configuration.MessageHandlers);
            IndexCreation.CreateIndexes(typeof(TicketsByPaymentTotal).Assembly,DocSession.Advanced.DocumentStore);
        }

        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute("Default",
                "{controller}/{action}/{id}",
                new { controller="Home",action="Index",id=""});
        }
    }

如何解决这个问题。

感谢。

的问候,

1 个答案:

答案 0 :(得分:0)

您正在系统数据库中创建索引,即使您使用名为“Dinnerware”的命名实例。

  • 如果要使用指定的数据库,请在创建文档存储实例时将其传递给DefaultDatabase参数。

  • 打开会话时不要传递名称。当您有多数据库需求时,应该保留这一点。

  • 您应该直接将文档存储实例传递到CreateIndexes方法,而不是将其拉出会话。

  • 不要打开会话并将其分配给属性。会议意味着短暂,必须处理。只有文档存储应该在单个实例上存在很长时间。通常,会话是在using语句中创建的。在Web应用程序中,应为每个Web请求创建一个新会话。