[英]Fluent NHibernate cascading delete convention for aggregate roots
Question is: how to write convention that prevents deleting entity reference if it inherits from type Root
? 问题是:如何编写约定以防止删除实体引用(如果它继承自
Root
类型)?
I'm using fluent nhibernate and it's auto mapping feature. 我正在使用流利的nhibernate及其自动映射功能。 Turned on cascading delete by default.
默认情况下启用级联删除。
Everything was really cool until I finally hit case when I need to actually delete aggregate root that references another one. 在我最终遇到需要删除引用另一个根的聚合根之前,一切都非常酷。
I got roots User
and Application
. 我有根
User
和Application
。 User
registers Applications
. User
注册Applications
。 If it's registered by mistake, there is small time gap in which User
with role Admin
can remove it (I'm kind a sure I won't ever need that data). 如果错误注册,则有一个很小的时间间隔,具有
Admin
角色的User
可以删除它(很确定我永远都不需要该数据)。
When User
removes Application
, because of cascading delete, nhibernate removes User
itself (what an irony...). 当
User
删除Application
,由于级联删除,nhibernate删除了User
本身(具有讽刺意味的是...)。
I'm unsure how to specify SaveUpdate cascading for Application->User association only: 我不确定如何仅为应用程序->用户关联指定SaveUpdate级联:
Does the trick: 绝招:
m.References(x=>x.RegisteredBy).Cascade.SaveUpdate(); //RegisteredBy.Type==User
Additionally, told fnh where to look for overrides: 另外,告诉fnh在哪里寻找替代:
var m=new AutoPersistenceModel(storeCfg);
m.UseOverridesFromAssembly(assembly);
You can override behaviour of cascading for Application->User association. 您可以覆盖应用程序->用户关联的级联行为。 You need to set SaveUpdate() instead of all-delete-orphan.
您需要设置SaveUpdate()而不是all-delete-orphan。 To do this you will need to implement
IAutomappingOverride<Application>
为此,您将需要实现
IAutomappingOverride<Application>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.