Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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#_Database_Nhibernate_Parent Child_Readonly - Fatal编程技术网

C# NHibernate-防止删除特定实体(即使其只读)

C# NHibernate-防止删除特定实体(即使其只读),c#,database,nhibernate,parent-child,readonly,C#,Database,Nhibernate,Parent Child,Readonly,如何防止NHibernate删除特定类的单个实体? 我目前使用的编程方式需要检查实体的唯一字段“Name” 这是一个场景:我有一个人和一个团队。该组可以有个人和其他组。如果试图删除名为“Admins”的组,由于我强制执行的事务级别约束(特别是检查组的“名称”列/字段,因为这是唯一的),该组将不会被删除。那很好 但是现在我想,如果创建了另一个组,并且“Admins”成为该组的一个子组,那么检查将失败。这将意味着删除“管理员”。因此,我正在寻找一种更好的方法,而不是遍历父/子包含树,例如使用NHib

如何防止NHibernate删除特定类的单个实体? 我目前使用的编程方式需要检查实体的唯一字段“Name”

这是一个场景:我有一个人和一个团队。该组可以有个人和其他组。如果试图删除名为“Admins”的组,由于我强制执行的事务级别约束(特别是检查组的“名称”列/字段,因为这是唯一的),该组将不会被删除。那很好

但是现在我想,如果创建了另一个组,并且“Admins”成为该组的一个子组,那么检查将失败。这将意味着删除“管理员”。因此,我正在寻找一种更好的方法,而不是遍历父/子包含树,例如使用NHibernate

我不能使用诸如“class Mutable=false”之类的类范围的限制,我的意思是对某个类的一个或两个单独实体具有只读限制

问候,


_NT

您可以编写自己的IPreDeleteEventListener实现,并将其挂接到nhibernate的事件系统中,以编程方式停止并删除实体


是使用侦听器的一个示例。

但这需要手动检查很多内容。没有办法做到这一点吗?对不起,我不能为你的情况提供更好的建议。让我这样说吧。“手动检查很多东西”都是关于域的复杂性。ORM对此无能为力。这里没有冒犯您的意思,但现在可能是重新考虑域对象设计的时候了,如果还不太晚的话。为什么要重新考虑域对象设计?我只需要尽可能以最好的方式使几个实体成为只读的——这是一种比ifs和ELSE更好的方式,如果存在的话。。。因此,我提出了一个问题:“成为父/子关系中的子对象”,这让我想到了域对象设计问题。对不起,如果我误解了你的情况。你是在说ORM级别的外键检查吗?这在NH是不存在的。我个人的做法是在服务层而不是数据访问层进行这种检查。回到你的问题上来。不需要。在这种情况下,不应该有任何配置/映射来帮助您。我不认为其他ORM能帮上忙。