ravendb - How to change the collection name on an index -


when save document has generic type dataview<customer>, i'm manually setting collection name "customers". however, i'm having trouble making index using abstractindexcreationtask non-default collection name. here's index:

public class customers_search     : abstractindexcreationtask<dataview<customer>, customers_search.result> {     public class result     {         public string query { get; set; }     }      public customers_search()     {         map = customers =>             customer in customers             customer.data != null             select new             {                 query = asdocument(customer.data).select(x => x.value)             };         index(x => x.query, fieldindexing.analyzed);     } } 

when gets deployed, looks this:

from customer in docs.dataviewofcustomer customer.data != null select new {     query = customer.data.select(x => x.value) } 

this doesn't work obviously, , if change dataviewofcustomer "customers" works fine.

i'd rather not have use non-type-checked (string) indexes deploy. is there way set collection name abstractindexcreationtask class?


update

since data class generic, made generic index fixes names.

public class dataviewquery<tentity>     : abstractindexcreationtask<dataview<tentity>, dataviewqueryresult> {     private readonly string _entityname;     private readonly string _indexname;      // fix collection name index name     public override string indexname { { return _indexname; } }     // fix collection name index query     public override void execute(idatabasecommands databasecommands, documentconvention documentconvention)     {         var conventions = documentconvention.clone();         conventions.findtypetagname =             type =>                 typeof(dataview<tentity>) == type                     ? _entityname                     : documentconvention.findtypetagname(type);         base.execute(databasecommands, conventions);     }      public dataviewquery(string entityname)     {         _entityname = entityname;         _indexname = string.format("{0}/{1}", entityname, "query");          map = items =>             item in items             item.data != null             select new             {                 query = asdocument(item.data).select(x => x.value)             };         index(x => x.query, fieldindexing.analyzed);     } }  public class dataviewqueryresult {     public string query { get; set; } } 

then can create specific index has configuration in it.

// sets collection type (dataview<customer>) index public class customerquery : dataviewquery<customer> {     // sets collection name index     public customerquery() : base(entityname.customers) {  } } 

you need configure in conventions. property configure findtypetagname


Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -