我有一个非常简单的情况,但我似乎无法理解;我有一个表促销,其中有许多网站。 网站可以与不同的促销一起使用,在我的(postgres)数据库中,我有3个表格;促销,网站和promotion_sites。 在我的Web应用程序中,用户可以编辑促销并添加一组网站(新行分隔)。因此,在保存中,网站集合将保存在促销中。这有效。还有2个问题; 1)旧网站记录未被删除(当从网站行删除一个) 2)保存当前站点时,将重新创建所有原始站点
我的问题是我应该在哪个级别管理网站; 1)申请水平;在重新插入之前删除所有网站 2)数据级别;是否有一个nhibernate配置来做到这一点? 3)数据库级别;根据promotions_sites中缺少项目
在站点表上创建触发器/级联删除答案 0 :(得分:0)
首先,自动孤儿会删除。当您的关系定义为many-to-many
时,无法自动删除网站。但是,如果您的promotions_sites
表格被映射为单独的实体,并且您在网站和促销中有两个one-to-many
关系,则可以通过设置实现自动删除关于与all-delete-orphan
的关系级联。
第二件事 - 管理集合的位置。你应该让NHibernate这样做。假设您有适当的映射,您不应该在应用程序级别或特别是在数据库触发级别关注它。无论如何,在NHibernate中处理集合的逻辑在某种程度上与您在数据库级别可能熟悉的不同。通常,您需要使用现有子集合加载父对象,修改集合并将更改提交回数据库。你不应该替换整个集合。
但是当您显示用于保存更改的映射和代码时,会更容易说话。