Я столкнулся со странной ошибкой в беглом nhibernate.У меня есть базовый набор классов, которые наследуются от интерфейсов, и я сопоставил интерфейсы с таблицами, и там, где классы используют их, они реализуют универсальный интерфейс.Они определены следующим образом:
interface IPage {
// properties
}
class IPageMap : ClassMap<IPage> {
// mapping information
}
class Page : IPage {
// IPage Implementation
}
class ITag {
// properties
}
class ITagMap : ClassMap<ITag> {
// mapping information
}
class Tag : ITag {
// ITag implementation
}
class Template {
virtual IList<IPage> Pages { get; set; }
virtual IList<ITag> Tags { get; set; }
}
Это должно работать нормально.Когда я создаю объект, подобный этому ...
var pages = new List<IPage> {
new Page {
// ..
}
}
pages.ForEach( x => { session.SaveOrUpdate(x); } ); // no exception here
var tags = new List<ITag> {
new Tag {
// ...
}
}
tags.ForEach( x => { session.SaveOrUpdate(x); } ); // exception happens here.
var list = new List<Template> {
new Template {
Pages = new List<IPage> {
new Page {
// ...
}
},
Tags = new List<ITag> {
new Tag {
// ..
}
}
}
}
Мне выдается следующее исключение.
Нет сохранения для Tag
Хорошо, я не определил персистер для Tag
, но я сделал для ITag
, и Tag
наследует его.IPage
и Page
работают одинаково.Если я закомментирую информацию тега и просто оставлю реализацию IPage
и Page
, она отлично подойдет для них.
Почему к ITag
и Tag
относятся по-разному?Есть идеи?