如果这是问题的一部分,我的所有类都使用 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 类中的对象,我希望将它们放入自己的表中,其中它们对于特定字段也是唯一的。当我插入目标时,我希望能够插入所有这些。如果多个目标共享一个类型的关系,我想引用现有的,而不是为每个目标创建一个新的。
至于 Parent 的问题,Target 是 Consensus Target 的 Child,与 Target 有 HasMany 关系。如何从子项创建对父项的引用?或者我什至应该打扰?我最终只是将对象从目标中拉出并将它们放在它们唯一的列表中,然后从本质上颠倒从 Child ManyToOne 到 Parent HasMany 的关系,但我真的希望有一种更清洁的方法来做到这一点。TL; DR:NHibernate 有什么方法可以插入特定字段唯一的对象吗?我有一个包含多对一关系中的对象的类,这些对象不存储有关引用它们的对象的信息,那么如何正确插入它们?