我如何让NHibernate忽略我的模型的子类的额外属性?没有Persister for ... {SUBCLASS} NHibernate与流利NHibernate
class SuperModel { // hot I know
{
public Guid Id { get; private set; }
public string FirstName { get; set; }
}
class SubModel : SuperModel {
public string FavoriteColor { get; set; }
}
我真的只是想用我的仓库来存储SuperModel
数据,并使用FavoriteColor
其他地方,但我得到
No persister for: SubModel
即使我用我的资源库保存为
void Store(SuperModel model) {
using (var session = Session){
session.SaveOrUpdate(model); // <<<< The exception is thrown here
}
}
和一些我在其他地方使用的地方
void WhatToDo(SubModel model) {
doSomething(model.FavoriteColor);
}
我用它作为这样
var model = new SubModel { FirstName = "Miranda", FavoriteColor = "Green" };
modelRepository.Store(model);
someService.WhatToDo(model);
任何一个知道我可以流利地配置这一点?谢谢。
FYI-隐式和显式转换没有效果。
编辑
我的映射都是这样
class SuperModelMap : ClassMap<SuperModel>
{
public SuperModelMap()
{
WithTable("SuperModels");
Id(x => x.Id);
Map(x => x.FirstName);
}
}
编辑2
我图/发现我能做到这一点,但在我的数据库,我有有一个虚拟桌子,这将是低效的。它的工作原理,但必须有一个更好的办法...
在我SuperModelMap ...
JoinedSubClass<SubModel>("SubModel", MapSubModel);
private void MapSubModel(JoinedSubClassPart<SubModel> part)
{
// Leave this empty
}
编辑3 我很接近,但我仍然得到选择不同的错误。
我试过了。
DiscriminateSubClassesOnColumn("Id")
.SubClass<SubModel>(m => { });
的InnerException { “对象ID为: 5586b075-47f1-49c8-871c-9c4d013f7220 是指定的子类的不: 超级用户(鉴别是: '1000')”}的System.Exception {NHibernate.WrongClassException}
你能告诉我们你的映射吗? – 2009-07-20 07:48:43
试图解决我遇到的问题。对于整个页面的其余部分,“热我知道”的评论之后,我只是将代码作为故事阅读,并且无法停止发笑。良好的固体测试案例:) – percent20 2011-11-30 19:04:27