简体   繁体   English

聚合根的流畅NHibernate级联删除约定

[英]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 . 我有根UserApplication 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM