2010-11-07 77 views
0

问题是:如何编写约定,防止删除实体引用,如果它从类型Root继承?流利NHibernate级联删除约定的聚合根


我使用流利的nhibernate和它的自动映射功能。默认打开级联删除。

一切都非常酷,直到我终于遇到了情况,当我需要实际删除引用另一个的聚合根。

我得到了根UserApplicationUser寄存器Applications。如果它是错误登记的,那么UserAdmin角色可以删除它(我很确定我不会需要该数据)的时间间隔很小。

User删除Application,由于级联删除,nhibernate删除User本身(有什么讽刺的...)。


我不确定如何指定SaveUpdate级联仅供应用程序 - >用户协会:

alt text


的伎俩:

m.References(x=>x.RegisteredBy).Cascade.SaveUpdate(); //RegisteredBy.Type==User 

另外,告诉fnh在哪里寻找替代物:

var m=new AutoPersistenceModel(storeCfg); 
m.UseOverridesFromAssembly(assembly); 

回答

1

您可以覆盖应用程序 - >用户关联的级联行为。您需要设置SaveUpdate()而不是all-delete-orphan。 为此,您需要执行IAutomappingOverride<Application>

+0

我有点困惑了。添加图片到我的问题。 – 2010-11-07 14:45:38

+0

你解决了一个问题吗? – Sly 2010-11-08 09:28:32