2010-02-09 70 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

相关问题