2010-02-09 69 views
0

我試圖保存一個新的實體「發佈」與1項添加到其「修訂」列表。流利nhibernate:保存與子實體的新實體時INSERT錯誤

A Post可以有許多PostRevisions,而PostRevision只能有一個Post

我試圖映射PostRevisions的幾種方法,我PostRevisionMap如下:

public PostRevisionMap() 
    { 
     Id(x => x.PostRevisionId, "PostRevisionId"); 
     Map(x => x.Created, "CreateDateTime").Not.Nullable(); 
     /// SOME OTHER STUFF HERE 
     References(x => x.Post, "PostId"); // OPTION 1 

     References(x => x.Post,"PostId").ForeignKey("PostId").PropertyRef(d => d.PostId); // OPTION 2 

     HasOne<Post>(x => x.Post).ForeignKey("PostId").Cascade.All().PropertyRef(x => x.PostId); // OPTION 3 
    } 

當調用SaveOrUpate我得到一個不同的錯誤

OPTION 1 & 3原因

The INSERT statement conflicted with the FOREIGN KEY constraint "PostId". 

選項2原因

NHibernate.HibernateException : Unable to resolve property: PostId 

我PostMap如下:

public PostMap() 
    { 
     Id(x => x.PostId).Column("PostId"); 

     HasMany(x => x.Revisions) 
      .Cascade.All() 
      .Table("PostRevisions") 
      .KeyColumn("PostId") 
      .ForeignKeyConstraintName("FK_PostRevision_Post"); 

     /// OTHER STUFF 
    } 

任何人都可以點我在正確的方向,因爲我不能當場的問題。 TIA

回答

3

試試這個:

PostMap

HasMany(x => x.Revisions) 
    .Inverse() 
    .Cascade.All(); 

PostRevisionMap:

References(x => x.Post); 
+0

感謝您的快速回答,但偏偏沒有喜悅。 仍然得到 'INSERT語句與FOREIGN KEY約束「PostId」衝突。 郵政表上的郵政編碼是自動遞增主鍵。這是錯誤來自我認爲 – Dve 2010-02-09 22:12:31

+0

嗯......試試PostMap:Id(x => x.PostId).GeneratedBy.Identity(); – 2010-02-09 22:21:30

+0

發現了這個問題,在我的測試過程中,我不知何故在兩個表格之間產生了一個新的連接。 感謝您的幫助/ – Dve 2010-02-09 22:41:33

相關問題