NHibernateにモデルのサブクラスの余分なプロパティを無視させる方法を教えてください。No persister for ... {SUBCLASS} NHibernate with Fluent 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
を使用する場合にのみ、私は、私は
void Store(SuperModel model) {
using (var session = Session){
session.SaveOrUpdate(model); // <<<< The exception is thrown here
}
}
としての私のリポジトリでそれを保存していても
No persister for: SubModel
を取得
と他に私が使用しているもの
void WhatToDo(SubModel model) {
doSomething(model.FavoriteColor);
}
そして、私はそのような
var model = new SubModel { FirstName = "Miranda", FavoriteColor = "Green" };
modelRepository.Store(model);
someService.WhatToDo(model);
どれ一つとして使用し、私は流暢にこれを設定する方法を知っていますか?ありがとう。
FYI暗黙的キャストと明示キャストは効果がありません。
編集
私のマッピングが、私はこれを行うことができることが分かった2
は、私が理解これ
class SuperModelMap : ClassMap<SuperModel>
{
public SuperModelMap()
{
WithTable("SuperModels");
Id(x => x.Id);
Map(x => x.FirstName);
}
}
編集/似ていますが、私のデータベースでは、私がしなければなりませんダミーのテーブルがありますが、これはちょうど非効率です。それは動作しますが、より良い方法がなければならない...私の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
マッピングを表示することはできますか? –
私の問題を解決しようとしていました。私はちょうど話としてコードを読んで、笑いを止めることができなかったページの残りの部分全体のために "ホット私が知っている"のコメントの後にええ。学習のための良い固体テストケース:) – percent20
@ percent20 - 投票してください! –