Nhibernate 流利的纤维酸盐;收藏管理

Nhibernate 流利的纤维酸盐;收藏管理,nhibernate,collections,fluent-nhibernate,Nhibernate,Collections,Fluent Nhibernate,我有一个非常简单的情况,但我似乎不能左右我的头;我有一个表,其中有许多网站的促销活动。该网站可以用于不同的促销活动,在我的(postgres)数据库中,我有3个表;促销、网站和促销网站。 在我的web应用程序中,用户可以编辑促销并添加网站集合(新行分隔)。因此,在保存中,网站的集合在促销时保存。这很有效。还有两个问题; 1) 旧的站点记录不会被删除(从站点行中删除时) 2) 保存当前站点时,将重新创建所有原始站点 我的问题是我应该在哪个级别管理这些站点; 1) 应用水平;只是在重新插入之前删除所

我有一个非常简单的情况,但我似乎不能左右我的头;我有一个表,其中有许多网站的促销活动。该网站可以用于不同的促销活动,在我的(postgres)数据库中,我有3个表;促销、网站和促销网站。 在我的web应用程序中,用户可以编辑促销并添加网站集合(新行分隔)。因此,在保存中,网站的集合在促销时保存。这很有效。还有两个问题; 1) 旧的站点记录不会被删除(从站点行中删除时) 2) 保存当前站点时,将重新创建所有原始站点

我的问题是我应该在哪个级别管理这些站点; 1) 应用水平;只是在重新插入之前删除所有站点 2) 数据级;是否有nhibernate配置来执行此操作?
3) 数据库级;根据促销站点中缺少项目在站点表上创建触发器/级联删除首先自动孤立删除。当您的关系定义为多对多时,无法自动删除站点。但是,如果您的
promotions\u站点
表映射为单独的实体,并且站点和促销中有两个
one-to-many
关系,则可以通过将这些关系上的cascade设置为
all delete孤儿
来实现自动删除

第二件事-在何处管理集合。你应该让NHibernate来做这件事。假设您有正确的映射,您不应该在应用程序级别,特别是在数据库触发器级别关心它。无论如何,在NHibernate中处理集合的逻辑在某种程度上与您从数据库级别熟悉的有所不同。通常,您需要用现有子集合加载父对象,修改集合并将更改提交回数据库。您不应该替换整个集合


但是,当您显示映射和用于保存更改的代码时,谈话会更容易。

您可以发布这些实体的映射吗?