延迟加载不适用于一对多

时间:2010-05-14 21:24:17

标签: c# .net fluent-nhibernate

任何使用父表的主键的1-M,但使用不同列的任何1-M都不起作用。它正确生成SQL,但是将键的值放入SQL而不是我想要的列值。

示例映射:

    public TemplateMap()
    {
        Table("IMPORT");

        LazyLoad();

        Id(x => x.ImportId).Column("IMPORT_ID").GeneratedBy.Assigned();

        Map(x => x.ImportSetId).Column("IMPORTSET_ID");

        HasMany(x => x.GoodChildren)
            .Access.CamelCaseField()
            .KeyColumns.Add("IMPORT_ID")
            .Cascade.Delete()
            .Inverse();

        HasMany(x => x.BadChildren)
            .Access.CamelCaseField()
            .KeyColumns.Add("IMPORTSET_ID")
            .Cascade.Delete()
            .Inverse();
    }

延迟加载适用于GoodChildren,但不适用于BadChildren。

两个孩子的SQL语句都是正确的。但是使用了错误的值。如果IMPORT_ID的值为10且IMPORTSET_ID的值为12.值10将用于BadChildren的SQL中的IMPORTSET_ID而不是12。

任何人都有任何想法需要改变才能让BadChildren正常工作吗?

注意:
  GoodChildren链接到模板上的IMPORT_ID

BadChildren链接到模板上的IMPORTSET_ID

2 个答案:

答案 0 :(得分:0)

我不确定如何以您想要的方式执行此操作,但另一种方法是使用子表上的列来标识记录的类型:

        HasMany(x => x.GoodChildren)
            .Table("tblChildren")
            .Where("CHILD_TYPE='Good'");

        HasMany(x => x.BadChildren)
            .Table("tblChildren")
            .Where("CHILD_TYPE='Bad'");

答案 1 :(得分:-1)

升级到3.0版解决了这个问题。