如何判断一个引用的对象是否可以删除?

2024-05-18

我有一个名为“Customer”的对象,它将在其他表中用作外键。

问题是我想知道是否可以删除“客户”(即,它没有在任何其他表中引用)。

Nhibernate 可以做到这一点吗?


你所要求的是找到的存在CustomerPK值在引用表FK列中。 有很多方法可以解决这个问题:

  1. 正如 kgiannakakis 所指出的,尝试进行删除,如果抛出异常则进行回滚。有效但丑陋且无用。这还要求您在数据库中设置 CASCADE="RESTRICT"。该解决方案的缺点是您必须尝试删除该对象才能发现无法删除

  2. 映射引用的实体Customer作为集合,然后对于每个集合,如果它们Count > 0然后不允许删除。这很好,因为只要映射完成,就可以安全地防止架构更改。这也是一个糟糕的解决方案,因为必须进行额外的选择。

  3. 有一个执行查询的方法,例如bool IsReferenced(Customer cust)。很好,因为您可以有一个查询,您可以在需要时使用它。不太好,因为它可能容易因架构和/或域更改而出错(取决于您将执行的查询类型:sql/hql/criteria)。

  4. 类本身的计算属性,带有映射元素,例如<property name="IsReferenced" type="long" formula="sql-query that sums the Customer id usage in the referenced tables" />。很好,因为它是一个快速的解决方案(至少与您的数据库一样快),无需额外的查询。不太好,因为它很容易受到架构更改的影响,因此当您更改数据库时,一定不要忘记更新此查询。

  5. 疯狂的解决方案:创建一个进行计算的模式绑定视图。当您需要时对其进行查询。很好,因为它受架构限制并且不太容易受到架构更改的影响;很好,因为查询速度很快;不太好,因为您仍然需要执行额外的查询(或者将此视图的结果映射到解决方案 4 上。)

2、3、4 也很好,因为您还可以将此行为投影到您的 UI(不允许删除)

就我个人而言,我会选择 4、3、5。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何判断一个引用的对象是否可以删除? 的相关文章

  • NHibernate 和 DateTime 映射的问题

    我在查询时遇到问题 我在给定的范围内选择记录 时间跨度 我从中选择的列的类型为日期 我已经映射了这个 列作为 DateTime 属性 查询可以工作 但速度很慢 生成的查询如下所示 由NH分析器 http nhprof com select
  • 如何在 NHibernate 查询中仅选择几列?

    我有一个一类到一表的映射 不幸的是 这个表有 110 多个列 查询需要很长时间 尤其是大多数时候我只想查看 我的问题是查询是根据用户想要查看的内容动态生成的 我无法真正使用不同的列创建不同的映射 因为会有大量的组合 我正在使用条件 API
  • 同一个表的多个外键

    我有一个参考表 其中包含性别 地址类型 联系人类型等各种受控值查找数据 许多表都有指向该参考表的多个外键 我还有多对多关联表 其中同一个表有两个外键 不幸的是 当这些表被拉入 Linq 模型并生成 DBML 时 SQLMetal 不会查看外
  • 如何在 NHibernate 中使用 READPAST 提示?

    有什么办法可以让 NHibernate 使用吗the READPAST hint https learn microsoft com en us sql t sql queries hints transact sql table从 SQL
  • 对 id 属性使用自定义类型

    我有以下课程 public class UserId public UserId int id some validation public override string ToString public class User public
  • 在nhibernate中设置聚集索引

    我试图在 nhibernate 中定义一个不是 id 的属性作为聚集索引 但我发现没有办法做到这一点 谁能给我指点一下这是如何完成的 或者它是当前在 nhibernate 中不可用的东西 提前致谢 您可以使用
  • Sql 2008 文件流与 NHibernate

    我试图在 sql server 2008 中使用 Filestream 来存储用户上传的图像 我的问题是NHibernate不会出错 但它也不会将数据保存到数据库中 没有创建记录 下面的 Image 类是一个自定义类 不要与 System
  • Grails:防止具有多种关系的两个域类之间的级联关联

    考虑两个域类 工作和报价 一份工作有很多报价 但一份工作也有一个已接受的报价 接受的报价可以为空 并且只有在用户接受特定报价后才应设置 我将关系映射如下 为了说明目的进行了简化 class Job String title Quote ac
  • 1:1 关系中的双向外键约束

    我正在使用 MySQL 数据库 在我的关系数据模型中 我有两个相互 1 1 关联的实体 在我的架构中 通过将 FK 字段放入两个表之一中来建立 1 1 关系 该字段与另一个表的 PK 相关 两个表都有 PK 并且都是自动递增的 BIGINT
  • Breeze + NHibernate 多对一关系,避免指定关系键

    以下多对一映射正在运行 取自 NorthBreeze public partial class UserRole public virtual long ID get set public virtual long UserId get s
  • NHibernate 将多个表映射到一个类

    在我的旧数据库中 我遇到这样的情况 TableA id A PK cod A TableB id B PK cod B id A FK TableC id C PK cod C id B FK 由于多种原因 我需要将这些表映射到单个类中 本
  • 无法将外键值插入链接表

    我目前正在尝试将数据插入名为的表中 客户报价 该表充当 顾客 表和 客户关税 桌子 它还记录通过以下方式提交数据的用户 user table 这是我的数据库的架构 https i stack imgur com gyCdb png http
  • Mysql显示创建约束?

    有没有一种简单的方法来查询表的约束 特别是外键 就像显示创建表一样 但仅用于约束 thanks 普夫戈丁 要仅显示外键约束 您可以检查 information schema table constraints 中的constraint ty
  • 尽管 HQL 获取,Nhibernate 仍然生成代理

    我有以下 HQL 语句 select distinct t from TaskEntity as inner join fetch t Case as c inner join fetch c Client as client inner
  • NHibernate 对单个属性的更新会更新 sql 中的所有属性

    我正在 NHibernate 中对单个属性执行标准更新 然而 在提交事务时 sql 更新似乎设置了我映射到表上的所有字段 即使它们没有更改 这肯定不是 Nhibernate 中的正常行为吧 难道我做错了什么 谢谢 using var ses
  • NHibernate HQL SELECT 子查询中的 TOP

    有没有办法在子查询上使用 SetMaxResult 我正在编写一个查询以返回属于最新订单的所有订单项 所以我需要限制子查询的记录数 等效的 sql 看起来像这样 SELECT i FROM tbl Orders o JOIN tbl Ord
  • NHibernate、Fluent NHibernate 和 Iesi.Collection 的问题。接下来你会尝试什么?

    我对 NHibernate 非常陌生 所以如果我在这里遗漏了一些琐碎的事情 我深表歉意 我目前正在阅读 packtpub 出版的一本名为 NHibernate 3 Beginners Guide 的书 我基本上都是按照书中的指示进行的 当我
  • 在 nHibernate 关系中使用实体的 Lite 版本?

    在某些情况下 出于性能原因 创建一个实体的轻量级版本 指向同一个表 但映射的列较少 这是一个好主意吗 例如 如果我有一个包含 50 列的联系人表 并且在一些相关实体中 我可能对 FirstName 和 LastName 属性感兴趣 那么创建
  • 使用无状态会话延迟查找字典值

    在我的应用程序中 我设置了一个三元字典映射 以便对于给定用户 我可以检索属于该用户的对象的每个实例的 设置 也就是说 我有类似的东西 public class User public virtual IDictionary
  • 流畅的 Nhibernate 枚举映射

    我有一些问题enum流畅的 NHibernate 中的映射 我知道这个问题已被问过很多次 但我找不到任何适合我的解决方案 我是 NHibernate 的新手 看起来我可能错过了一些简单而愚蠢的事情 这是我的代码 public class D

随机推荐