Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate-它是否能很好地处理数据库级的外键约束级联删除_C#_Sql Server_Nhibernate - Fatal编程技术网

C# 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会在应用程序级别调用任何自定义删除逻辑吗?或者我应该从RDBMS级别删除级联删除,并通过其配置定义该行为来使用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的答案),它可以使用它来获得更好的性能(在删除父项时不必执行单个子项删除)