Указание имени коллекции в RavenDB - PullRequest
30 голосов
/ 07 августа 2011

Допустим, у меня есть 3 объекта: фрукты, яблоко и апельсин. Fruit - это абстрактный базовый класс для Apple и Orange. Когда я использую session.Store (myApple), он помещает его в коллекцию Apple. MyOrange магазины в коллекции апельсинов. Имеет смысл.

Могу ли я сказать Рейвену, что я хочу коллекцию Фруктов, которая может содержать Яблоки или Апельсины? Mongodb позволяет это, поскольку позволяет явно указывать имя коллекции. Документация коллекций RavenDB гласит:

Ожидаемая схема использования: коллекции используются для группировки. документы с аналогичной структурой, хотя это и не требуется. От с точки зрения базы данных, коллекция - это просто группа документов которые имеют одно и то же имя объекта.

Я ожидаю, что это будет что-то вроде: session.Store (myApple) или session.Store ("Fruits", myApple)

Есть идеи? Спасибо.

1 Ответ

39 голосов
/ 07 августа 2011

Шило, Вы можете сделать это используя:

session.Store(apple);
session.Advanced.GetMetadataFor(apple)[Constants.RavenEntityName] = "Fruits";

Это долгий путь для этого. Гораздо лучшим способом было бы добавить эту логику глобально, это выглядит примерно так:

store.Conventions.FindTypeTagName = 
   type => type.IsSubclassOf(typeof(Fruit)) ? 
       DocumentConvention.DefaultTypeTagName(typeof(Fruit)) : 
       DocumentConvention.DefaultTypeTagName(type);

Это с этим справится.

...