首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NHibernate:使用Cascade=AllDeleteOrphan保存HasMany关系时违反了非空约束

NHibernate:使用Cascade=AllDeleteOrphan保存HasMany关系时违反了非空约束
EN

Stack Overflow用户
提问于 2010-03-10 23:40:53
回答 1查看 754关注 0票数 0

我的bean看起来像这样:

代码语言:javascript
运行
复制
public class A {  
    ...  
    [HasMany (MapType = typeof(B), Table = "B_table", ColumnKey = "A_object_id",  
              Fetch = FetchEnum.Join,  
              RelationType = RelationType.List, Index = "id",  
              Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]

    IList<B> BList { get; set; }
    ...
}

当对这个bean执行保存时,我希望类型B的bean也会被自动保存(并在更新时被删除)。NHibernate当然在尝试这样做,但它首先将B_table.A_object_id设置为NULL,然后NHibernate更新B_table,设置正确的B_table.A_object_id值(即: A.ID)。

这不是我想要的,因为我在数据库中有一个not NULL约束。

我的问题是:如何让NHibernate自动保存子对象,从一开始就设置了正确的ID?我知道我可以创建A bean,保存它,获得它的全新ID,创建B bean,设置它们的A_object_id,然后保存B bean……但这是一种变通方法。

EN

Stack Overflow用户

发布于 2010-03-10 23:58:57

单向关系(其中只有父对象知道子对象)总是导致更新以设置Id。我不知道为什么,这对我来说也没什么意义,但这就是NHibernate的工作方式。

您需要创建一个双向关系,其中HasMany将具有逆向= true,而B将在其中具有对类A的引用(应在将B添加到A集合时填充。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2418185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档