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