如何设置nhibernate来处理这个?

时间:2011-10-01 05:57:45

标签: nhibernate fluent-nhibernate

我目前有这段代码。

                    tableB = new TableB
                    {
                        TableA = tableA,
                    };

                    List<TableC> tableC = locations.Select(location => new TableC
                    {
                        TableB = tableB
                    }).ToList();

                    tableB.TableC = tableC;

                    tableA.TableB.Add(tableB);
nhibernate.Create(a);
nhibernate.Commit();

上面的代码有效,但我发现我这样做有点奇怪。

我想做点什么

  tableB = new TableB
                        {
                            TableA = tableA,
                            TableC = MakeAllTableCs()
                        };

                        tableA.TableB.Add(tableB);
    nhibernate.Create(a);
    nhibernate.Commit();

tableC的集合正在内存中进行,当我尝试创建时,我得到了

not-null property references a null or transient value

似乎它希望TableC集合中的每一个都引用TableB。看到我坚持使用TableB对象,这似乎有点奇怪。我希望它会把它想出来并用它作为参考。

无论如何我能做到这一点所以我不需要在每个TableC对象中都引用TableB吗?

编辑映射

     public class TableAMap : ClassMap<TableA>
        {
            public TableAMap()
            {

                Id(x => x.Id).GeneratedBy.GuidComb();
                HasMany(x => x.).Cascade.All().Inverse();
            }
        }


 public class TableBMap : ClassMap<TableB>
    {
        public TableBMap ()
        {

            Id(x => x.Id).GeneratedBy.GuidComb();
      References(x => x.TableA).Not.Nullable();
            HasMany(x => x.TableC).Cascade.All().Inverse();

        }

    }

  public class TableCMap : ClassMap<TableC>
    {
        public TableCMap ()
        {
            Id(x => x.Id).GeneratedBy.GuidComb();
           References(x => x.TableB).Not.Nullable();
        }
    }

1 个答案:

答案 0 :(得分:0)

很难说没有你的映射和真正的NHibernate代码(你调用session.Save()),但很可能你没有保存新的TableB对象,也没有TableA.b上的任何级联设置1}}(你需要其中一个)。