0

如果这是问题的一部分,我的所有类都使用 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 有什么方法可以插入特定字段唯一的对象吗?我有一个包含多对一关系中的对象的类,这些对象不存储有关引用它们的对象的信息,那么如何正确插入它们?

4

0 回答 0