У меня есть ситуация, когда, скажем, Notebook
хранит Pages
.Сначала у меня была такая структура.
class Notebook
{
// ...
public virtual IList<Page> Pages
{
get;
set;
}
}
class Page
{
// ..
public virtual int Number
{
get;
set;
}
}
Это работало хорошо.У каждой страницы был номер страницы.У меня была бы возможность изменить порядок страниц в моем пользовательском интерфейсе и обновить номер.Нет проблем.Затем я обнаружил, что могу использовать словарь и упростить его еще больше ...
class Notebook
{
// ...
public virtual IDictionary<int, Page> Pages
{
get;
set;
}
}
class Page
{
// ..
}
И нанести на карту это примерно так ...
public class NotebookMap : ClassMap<Notebook>
{
public NotebookMap()
{
// Specify the Entity Primary Key
Id(x => x.Id);
// one notebook will have a list of pages with page numbers
HasMany<int, Page>(x => x.Pages)
.DictionaryKey<int>("Number")
.DictionaryValue<Page>("Page")
.ForeignKey("Notebook")
.Schema("Notebook").Table("Pages");
Schema(Schemas.Collections ); Table("Notebooks");
}
}
Huzzah, с миром все было в порядке.Это прекрасно работает.Но мне любопытно ...
Есть ли способ привязать Number
к чему-то, что обеспечит автоматическое увеличение на Notebook
?Прямо сейчас я просто обрабатываю это в своем Service
, используя метод Notebook.Pages.Count
, когда добавляю новую страницу.Но беглый nHibernate кажется довольно умным.Можно ли каким-то образом интегрировать его прямо в отображение, чтобы в любое время, когда я добавлял новую страницу, он просто получал счетчик и проверял, что число соответствует?