C# NHibernate-它是否能很好地处理数据库级的外键约束级联删除
nHibernate是否能很好地处理数据库级级联删除?我的意思是,如果我在RDBMS级别设置了一个约束来级联删除所有孤立项,那么如果我要通过nHibernate删除一个实体,nHibernate会在应用程序级别调用任何自定义删除逻辑吗?或者我应该从RDBMS级别删除级联删除,并通过其配置定义该行为来使用nHibernate本身的级联删除特性吗C# NHibernate-它是否能很好地处理数据库级的外键约束级联删除,c#,sql-server,nhibernate,C#,Sql Server,Nhibernate,nHibernate是否能很好地处理数据库级级联删除?我的意思是,如果我在RDBMS级别设置了一个约束来级联删除所有孤立项,那么如果我要通过nHibernate删除一个实体,nHibernate会在应用程序级别调用任何自定义删除逻辑吗?或者我应该从RDBMS级别删除级联删除,并通过其配置定义该行为来使用nHibernate本身的级联删除特性吗 谢谢NHibernate只是将您的RDBMS当作一个数据存储。在大多数情况下,这意味着您可以让NHibernate为您完成工作 让NHibernate执行
谢谢NHibernate只是将您的RDBMS当作一个数据存储。在大多数情况下,这意味着您可以让NHibernate为您完成工作 让NHibernate执行级联删除。这样,您可以保留逻辑并控制它所属的位置(在应用程序中),而不是在应用程序几乎没有控制或灵活性的数据库中 编辑: 对于NHibernate,ON DELETE级联并不总是表现出很好的性能。您必须非常小心集合关联的级联设置设置。见本文: 除非性能对您来说是一个大问题,否则让NHibernate完成工作通常更干净,问题更少。杰米·艾德正确地指出: 与触发器一样,NHibernate不会 知道数据库表示 对象的属性已因错误而更改 数据库操作。我会避免 在大多数情况下,出于这个原因使用它们 案例
它可以与数据库级级联一起工作。您可以在映射中声明它们,因此hbm2ddl工具将在删除级联时生成
。该选项位于集合的键
属性中
<bag ...>
<key column="someId" on-delete="cascade" />
...
</bag>
...
这取决于你所说的“玩得好”是什么意思。可以将级联删除与NHibernate一起使用,但需要小心刷新可能受级联删除影响的对象。与触发器一样,NHibernate不知道对象的数据库表示形式由于数据库操作而发生了更改。在大多数情况下,出于这个原因,我会避免使用它们。这是次优的。NHibernate知道ON DELETE CASCADE(参见dotjoe的答案),它可以使用它来获得更好的性能(在删除父项时不必执行单个子项删除)