0
我遇到了流利的nhibernate奇怪的錯誤。我有一組繼承自接口的基本類,並且我已將接口映射到表,並且類使用這些接口,它們實現了接口的一般性。它們定義如下:流利的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
被區別對待?有任何想法嗎?
好的,這很好 - 但爲什麼我不必用'Page'來做?我沒有把它映射成一個sublcass,它仍然有效。 – Ciel 2011-03-25 14:18:04
我看不出它在這裏告訴我的任何區別。其他地方一定有區別。 – 2011-03-25 14:20:05
是的,因此我完全混淆。 e.e – Ciel 2011-03-25 14:34:51