2011-10-01 16 views
0

我目前擁有這段代碼。如何設置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(); 

表C的的集合在內存中被製成,當我嘗試做一個創造,我得到

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(); 
     } 
    } 

回答

0

硬盤沒有你的映射和實際NHibernate的代碼(你叫session.Save()),但要說最有可能你不保存新TableB對象,也沒有任何梯級上設置TableA.b(你需要其中之一)。

+0

好吧我更新了顯示映射。讓我知道你是否需要更多信息。 – chobo2

+0

@ chobo2好像你沒有在保存之前設置對父對象的引用('TableB.TableA'和'TableC.TableB')。 – cremor

+0

好吧,我更新了我目前的工作。 – chobo2

相關問題