流暢なnhibernateで奇妙なエラーが発生しました。私はインターフェイスから継承するクラスの基本セットを持っており、インターフェイスをテーブルにマップしています。クラスがこれらを利用する場合は、インターフェイスのジェネリックを実装します。それらは以下のように定義される。Fluent 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'でそれをしなければいけませんでしたか?私はサブクラスとしてマップしていないし、それでも動作します。 – Ciel
ここに私があなたに教えてくれる違いはありません。違いがあるはずです。 –
はい、私の完全な混乱。 e.e – Ciel