我已经编写了一个用于创建索引的代码,但是当我运行应用程序并尝试调用它时,则会出现“没有指定索引”的错误。我的代码如下:
我为索引创建创建了一个类,如:
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=""});
}
}
如何解决这个问题。
感谢。
的问候,
沙
答案 0 :(得分:0)
您正在系统数据库中创建索引,即使您使用名为“Dinnerware”的命名实例。
如果要使用指定的数据库,请在创建文档存储实例时将其传递给DefaultDatabase
参数。
打开会话时不要传递名称。当您有多数据库需求时,应该保留这一点。
您应该直接将文档存储实例传递到CreateIndexes
方法,而不是将其拉出会话。
不要打开会话并将其分配给属性。会议意味着短暂,必须处理。只有文档存储应该在单个实例上存在很长时间。通常,会话是在using
语句中创建的。在Web应用程序中,应为每个Web请求创建一个新会话。