entity删除实体时,如何置空外键。

问题描述

例如商品分类和商品明细。当删除商品分类时,如何将商品明细对应商品分类的的外键置空?在sqlServer里,可以手动设置为删除时置空,但如此操作太麻烦,能否在model实体中加标记或者在context中加代码实现?

解决方案

解决方案二:
外键的属性中就有主表删除时,子表外键置空的选项,不知道楼主说的手动是什么意思
解决方案三:
楼主说的那个属性是在sqlServer里设置的吧,这个我知道。能不能在entity里直接配置这个。我记得以前看到entity介绍时提到过,设置为可空的外键时,删除实体sql会自动置空,但是我测试发现不是这么回事。我删除商品分类时必须先修改该分类下的所有商品的外键为空,才能删除该分类,否则系统就报错。
解决方案四:
引用2楼cnuusw的回复:

我删除商品分类时必须先修改该分类下的所有商品的外键为空,才能删除该分类,否则系统就报错。

你的这个说法本身就不和逻辑啊。如果要删除分类,应该先删除该分类下的所有商品,怎么能仅仅删除所有商品的外键呢?
解决方案五:
反过来说,如果要修改某一批商品的分类,那么这是业务操作,你让EF如何敢想当然地替你把它改成null?那样它也太随便、太武断了。
解决方案六:
这种是数据库表驱动开发的想法,很low。就算非要支持删除基础数据,而不影响关联数据的其他数据。你得作个接口,一但这个类实现这个接口就使用逻辑删除。
解决方案七:
createtabelusers(idintprimarykeyidentity(1,1));createpassages(idintprimarykeyidentity(1,1),userIDintforeignkeyreferencesusers(id)onupdatecascadeondeletesetnull);

时间: 2024-07-31 18:36:28

entity删除实体时,如何置空外键。的相关文章

hibernate级联,删除一方不删除多方,只是把多方的外键置空,请问怎样设置

问题描述 hibernate级联,删除一方不删除多方,只是把多方的外键置空,请问怎样设置问题补充:也就是说这个问题在级联关系中没有对应,需要在删除一方前手动清空多方的外键对应么 解决方案 对头,就是这个意思的解决方案二:可以通过hibernate的回调,用sql语句直接删除来解决你的问题关于回调可以参考这个http://aidiyuxin.iteye.com/blog/224850

spring-SSH项目删除用户时出错Cannot delete or update

问题描述 SSH项目删除用户时出错Cannot delete or update struts2:2.3.20 spring:4.1.5 hibernate:4.3.8 用户与订单一对多的关系,数据库中订单表有用户这个外键.在用户映射文件中已设置cascade="delete" 项目启动无错误,在后台管理用户页面删除用户时报如下错误: 16:35:30,957 WARN SqlExceptionHelper:144 - SQL Error: 1451, SQLState: 23000

.Net中删除数据前进行外键冲突检测

数据 在编写数据库系统中为了保证系统中数据的一致性最简便且安全的方法就是在DBMS中建立外键约束,但删除主键数据时如果违反了外键约束,尽管DBMS会给出错误提示,如SQL Server的提示信息"%1! 语句与 %2! %3! 约束 '%4!' 冲突.该冲突发生于数据库 '%6!',表 '%8!'%10!%11!%13!.",但这些提示信息对最终用户来说,是不友好的,于是就自己写了个类,用来删除记录时的进行外键冲突检测,代码如下: using System;using System.D

hibernate5(12)注解映射[4]一对一外键关联

在实际博客网站中,文章内容的数据量非常多,它会影响我们检索文章其它数据的时间,如查询发布时间.标题.类别的等.这个时候,我们可以尝试将文章内容存在另一张表中,然后建立起文章--文章内容的一对一映射 一对一关联有两种方式,一种是外键关联,另一种是复合主键关联. 外键关联 下面我们先看一个一对一单向关联的实例 /*************关联关系维护方************/ @Table(name = "t_article") @Entity public class Article

mysql中关于外键约束的小问题

问题描述 mysql中关于外键约束的小问题 我想问,主表被references后不允许先删除记录,又说从表指定on delete cascade后删除主表记录时从表记录随之删除,你说这不矛盾吗?到底让不让删除? 例如下面这张图,student_table参考teacher_table,我却删不掉主表teacher_table 解决方案 嗯,这个问题已经解决啦,是我测试代码写错了,删除记录用del 我那个写成drop了 解决方案二: 你需要先解除外键约束 再删除表 解决方案三: MySQL外键约束

外键要建立索引的原理和实验

项目中,我们要求凡是有主子关系的表都要使用外键约束,来保证主子表之间关系的正确,不推荐由应用自己控制这种关系. 但发现有时开发人员提交SQL语句时未必会注意外键列需要定义索引,或者不清楚为什么外键列需要建立索引,网上一些所谓的"宝典"也会将外键列建索引作为其中的一条,包括TOM大师,曾说过: 导致死锁的头号原因是外键未加索引(第二号原因是表上的位图索引遭到并发更新).在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁: 1)如果更新了父表的主键(倘若遵循关系数据库的原则,即

MySQL外键的设置及作用

外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存有 每个客户的订单 有了外键后 你只能在确信b 表中没有客户x的订单后,才可以在a表中删除客户x 建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键). 指定主键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 事件触发限制: on del

存在外键关联的主表truncate如何做

主外键是数据库提供的一种两表之间强制关联的方法,也可以从应用层实现. 优点 缺点 数据库实现的主外键 由数据库层机制保证,无需应用额外实现 强关联,不易扩展变更 应用实现的主外键 易扩展变更 完全由应用控制,要求较高 我认为需要根据实际情况进行取舍,例如表不复杂,可以由应用实现,若表之间关联较多且复杂,那么交由数据库处理,至少保证不会错. 存在主外键关联的主表,由于存在外键关联关系,因此有些操作就会禁止,例如truncate. 实验 1. 创建测试表 SQL> create table tbl_

实现删除主表数据时, 判断与之关联的外键表是否有数据

问题描述:某个基础信息表,与系统中30多个表存在外键关系,当删除基础数据时,需要判断是否已经被用过,如果用过则更改标志位,如果没有用过则直接删除,如何能很好实现这个处理?最好能够自动适应表的变化 问题解决(SQL Server 2005)-- SQL Server 2005的错误处理容易控制, 因此, SQL Server 2005中可以直接删除, 通过错误处理来确定是否需要更新. -- 示例如下.USE tempdbGO CREATE TABLE m(    id int PRIMARY KE