それが問題の一部である場合、私のクラスはすべて Not.LazyLoad() でマップされています。
それで、以前の問題の修正を見つけましたが、それは醜いので、誰かがより良い解決策を持っているかどうかを知りたいです. 詳細については、次のような構成を構築しようとしていました。
return Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(DbFile))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ConsensusTargetMap>().Conventions.Add<CascadeConvention>())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<TargetMap> ().Conventions.Add<CascadeConvention>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
次のような ClassMap がありました。
public class TargetMap : ClassMap<Target>
{
public TargetMap()
{
Not.LazyLoad();
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Foo1);
Map(x => x.Foo2);
Map(x => x.Foo3);
Map(x => x.Foo4);
//References(x => x.Parent);;
References(x => x.Type1).ForeignKey("Some_Field");
References(x => x.Type2).ForeignKey("Some_Other_Field");
References(x => x.Type3).ForeignKey("Yet_Another_Field");
//References(x => x.Parent).ForeignKey("Item_In_Parent's_List").Not.LazyLoad();
}
}
Type1、Type2、および Type 3 は Target クラスに含まれるオブジェクトであり、特定のフィールドによっても一意である独自のテーブルに配置する必要があります。ターゲットを挿入するときに、それらすべてを挿入できるようにしたい。複数のターゲットがタイプとの関係を共有している場合、ターゲットごとに新しいものを作成するのではなく、既存のものを参照したいと考えています。
親の問題に関しては、Target は、Target と HasMany 関係を持つコンセンサス Target の子です。子から親への参照を作成するにはどうすればよいですか? それとも気にする必要がありますか?最終的には、オブジェクトをターゲットから引き出して、それらが一意であるリストに配置し、本質的に Child ManyToOne から Parent HasMany への関係を逆にしましたが、これを行うためのよりクリーンな方法を本当に望んでいました。TL; DR: NHibernate が特定のフィールドで一意のオブジェクトを挿入する方法はありますか? ManyToOne 関係にあるオブジェクトを含むクラスがあり、これらのオブジェクトはそれらを参照するオブジェクトに関する情報を格納していません。どうすれば適切に挿入できますか?