EF 自关联表主键自增情况下,不能添加记录的问题,有谁解决过?

如题,我的系统中因为一个特定原因,需要一张自关联表(thisTable)来简化逻辑,
该表主键是自增的,结果发现无法添加记录,
错误消息:无法确定“db.thisTable”关系的主体端。添加的多个实体可能主键相同。
请问,有人解决过这个问题吗?

4个回答

自己解决了,顺便分享给大家:
在EF的设定里,自关联的表主键外键,都不能为空(为空就会破坏数据的完整性),
这在两表关联时没问题,但在自关联就有一个悖论,那就是第一条数据的ParentId指向谁?
这就是我这个问题的根本,所以我的做法,就是预先手动往表里插条记录,
以确保通过EF插入的数据,他的ParentId都能落实。

我们的数据库类别ID默认是自增长的 按理说不用指定主键ID 但是不指定ID
像我上面 一下次插入多条时 插入时却报错 ~~
无法确定“db.thisTable”关系的主体端。添加的多个实体可能主键相同。指定了ID 才能解决这个问题

你这个回答不能解决问题,我实验过了,空表只插入一条数据也不行,因自关联的原因。
希望有人能给出解决方案

最后codefirst解决一切问题。。。。。哎。。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
表自关联的问题
表结构T(C_NODE PK,P_NODE,Ser_No,Depth,Name)rn其中:P_NODE为父节点的C_NODE,rn Ser_No为本节点的编号,且每下降一级,编号就在父节点的基础上增加3位,rn Depth表示节点深度,而且[color=#FF0000]深度没有限制,目前10以内[/color],根节点深度为0rn Name本节点名称rn如rnT(C_NODE , P_NODE, Ser_No, Depth, name )rn---------------------------------------------------rn 1 0 100 1 中国rn 2 1 100001 2 浙江rn 3 2 100001001 3 杭州rn 4 1 100002 2 广东rn 5 4 100002001 3 广州rnrn现在要求查询结果如下:rnFirst,Second,Third ……rn中国 浙江 杭州 ……rn中国 广东 广州 ……rnrnSQL语句怎么写?rn谢谢!rn
ORACAL添加主键自增
创建一个序列 create sequence my_sequence         minvalue     1         nomaxvalue         start with   1         increment by 1         nocycle 创建触发器实现插入数据时自动触发触发器实现主键字段值自增 create trigger
postgis添加自增主键
 ALTER table 表名 add COLUMN  _id BIGSERIAL primary key;  _id后的类型一定是BIGSERIAL,或者SERIAL
mybatis添加记录时获取自增主键
mybatis的@Options注解能够设置缓存时间,能够为对象生成自增的key。 假设有一个用户信息表tb_user,字段有user_id(user_id为主键,自增,对应实体类属性为userId),name. 此处使用注解的方式,添加用户信息时,希望能够返回主键id值: @Insert("insert into tb_user(name) values (#{name})'") @Option...
自增型主键表,如何用(cmp)EntityBean,添加记录?
我用的是weblogic8.0 + Ase12.5 。我建了一个自增型主键的表。rnCreate Table A(rn A Number(15) Not null //自增型rn B char() rn)rn我在建EntityBean(cmp)的时候,添加记录的时候,rn要我初始化,自增型主键。但是你知道,自增型主键,是不能知己添加的。rnjavax.ejb.CreateException: [EJB:010148]In EJB 'A1', the primary key field 'aa' was not set during ejbCreate. All primary key fields must be initialized during ejbCreate.rn这是系统提示的错误!
oracle 解决主键自增问题
sql server和mysql都可以设置主键自增,而oracle主键是没有自增属性的,可以通过如下两种方式实现: [b] 1、建立序列通过触发器实现[/b] 创建序列 [code="java"]CREATE SEQUENCE MESSAGEID MINVALUE 1 MAXVALUE START WITH 1 INCREMENT BY 1 NOCACHE; [/code...
EF 主键自增ID 如何添加数据?
如题,数据库的表ID为自增ID。 在程序中该ID也是主键,与其他实体类有主外键关联关系。rnrn在插入数据时,如果取消数据库中该表的ID自增属性,能正常插入rnrn但如果数据库改回 ID为自增属性, 总是异常:更新条目出错。rnrn已设置实体类的该ID字段为 [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] 或者 Identity 等等,都插入不进去。 另外,重写add方法,不更列该字段 异常相同, 请问大家怎么处理?
查询关联主键的表
select * from user_constraints e where e.table_name='T_OA_TASK'; select b.table_name,b.column_name from user_constraints a inner join user_cons_columns b on a.constraint_name = b.constraint_name wher
多种数据库添加自增主键
------------------------------------------------------- -- MySql -------------------------------------------------------create table Person( id int not null auto_increment primary key, des va
【记录】Mysql数据库更新主键自增
语法:id从1000开始自增: ALTER TABLE 表名 AUTO_INCREMENT = 1000;
如何在有主键的情况下添加可以自增的字段
 1.现在表中新增需要的自增字段eg:serial 2.将字段定义索引 alter table  tablename ADD KEY comp_index (serial); 3.设置自增 alter table  tablename   modify serialBIGINT(20) auto_increment;
(主键 自增字段 )+ 空记录???
我用dbgrid连table3, table3里有indexnum(主键,自增字段),在sqlserver2000的企业管理器里手工添加时,indexnum能自动加1,但由于实际操作在dbgrid中,我用table3.insertrn或 table3.append时, 都会有'indexnum must have a value'的错误提示?为什么!?rn在线等待......
ORACLE表设置主键自增
--创建表 create table BJ_ZR_LNGWEEKREPORT_GasCompnt( idNumber number primary key,  --主键、自增长 gasName NVARCHAR2(100) not null, gasRatio NUMBER(10,2) not null, salesDate  DATE ); --创建序列 CREATE SEQUENCE lng...
postgresql 主键自增的表 序列
通常navicat中对mysql主键自增直接客户端指定即可,不过对PG貌似不支持客户端指定,所以需要执行sql。 如果表没有创建: 法一: create table test_a( id serial, name character varying(128), constraint pk_test_a_id primary key( id) ); 方法二: crea...
MySQL主键自增不能使用
[img=https://img-bbs.csdn.net/upload/201708/11/1502413777_167548.png][/img]
oracle数据库实现表主键自增
oracle不像mysql可以在建表的时候可以设置主键自增,需要自己实现自增。 第一步:新建一个sequence create sequence incre_seq increment by 1 start with 1  minvalue 1 maxvalue 9999999999999 nocache  order; 第二部:建一个触发器,每当向表中插入数据时都会触发触发
Oracle新建主键自增表
oracle创建主键自增表
EF插入主键的问题
数据库的ID为newid()的前八位rnId char(8) primary key default left(newid(),8)rnrn在用EF插入数据时,一直提示ID不能为空,这种情况下应该怎么插入主键啊。
ef插入主键问题
我在设计数据库的时候主键已经默认自动生成了,是字符串类型的,用ef插入的时候当然不会在为主键设置值。但ef提示主键不能为空,我也明白ef这么做也没错,可是我创建表时已经写好主键的生成方式了。求明白的人解决一下。下面写上我的表的生成sql语句。rncreate table Arn(rnAId nvarchar(50) primary key [color=#FF0000]default newid()[/color],rnAText nvarchar(50)rn)rn用ef插入时只插入AText字段,报主键不能为空。怎么解决啊?
有谁见,有谁解决过
过去一直使用PALMOS3.5,最近使用PALMOS5,大家都知道3.5是使用emulater,5.0是使用simulater来调试的,但不知为何点击debug运行提示找不到debugger,我的同事那里都可以运行,只有我这里不行,我的CPU是P4的,会不会与之有关呢,哪位碰到过快回复!
MySQL 设置、添加主键以及自增问题
1、学习MySQL时我遇到过创建成功后,未对相关表设置主键的问题。现在找到解决方法与大家一起分享。(不分大小写)2、首先对于直接在创建表时设置主键    create table table_name(sno int primary key,sname varchar(15),age int(11));    3、创建表后,将某列 col 或者将某属性设置为主键     alter table t...
EF插入多个关联表的问题 求救
首先,我先说下意图:rn 就是用张主表A,关联B,C等,B对A是一对多或一对一,C也一样。此时有个EXCEL表格要导入,这个EXCEL包含了这三张表信息的集合,A Model中包含B,C的外键,我不想B,C的数据被重复插入,所以会根据一些条件不让他重复插入,这时候,如果只A实体全部插入A,B,C是不能满足需求的。所以我就单独先查询数据库是否已被插入,没插入的时候再插入,然后在把ID赋值在A上,A.B也被赋值。但此时A插入的时候会报错,说“An entity object cannot be referenced by multiple instances of IEntityChangeTracker. ”就是多个实体被绑到IEntityChangeTracker上...rn 是不是我的逻辑错了,求建议,[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/11.gif][/img]
字符串与自增数字的:主键、关联键
问题背景:rn个人博客系统,使用个人姓名的拼音字符串作为二级域名。rnrnrn问题:rn我以前大多是使用数字自增ID作为数据表的主键及关联键,但在个人博客中这样会产生一个问题:rn[color=#FF0000]每次读取数据时,要根据姓名拼音来转查找转换为数字ID。[/color]这显示增加了额外的工作。rnrn因此,我想把个人博客的主键及关键外键都使用这个拼音字符串,这样不使用额外参数(数字ID),也不需要额外转换ID,rn就能够很方便地读取个人博客的所有内容。(因为域名中传递了这个参数)。rnrn要问的是:rn1)使用字符串作为主表的主键,及大多数表的关联键(外键),会不会产生效率的问题?rn因为数据表索引数字比索引字符串应该快很多。rn2)这种场景下这么用合适吗?与节省的工作相匹配吗?是否得不偿失?rnrn谢谢
解决spring自增型主键问题
解决sqlserver2008自增型主键问题
mysql 自增主键问题
mysql 自增主键只有在数据连续的情况下(1,2,3,4....n),性能最高吗?rnrn若中间的ID被删掉了呢(1,2,5,9,15....n),性能如何?
mysql主键与自增问题
我刚接触mysql,想问一下如何设置例如id为主键并且自增为1?
SQL2005自增主键的问题!
表tbl_Circle 已经存在字段Cir_PK_intCircleID .该字段现在只是不为空的int类型字段!rn我想通过SQL脚本语句把这个字段改成自增的主键!rn请问语句怎么写?rn我尝试下面的语句是错误的!rn[code=SQL]ALTER TABLE tbl_Circle ALTER column Cir_PK_intCircleID IDENTITY ( 1 , 1 )rn消息 156,级别 15,状态 1,第 1 行rn关键字 'IDENTITY' 附近有语法错误。[/code]
数据库自增主键的问题
--删除原表数据 --并重置自增列,对于有外键的数据 truncate 无法删除 truncate table tablename --只删除数据,标识值不清除 delete from tablename --设置允许显式插入自增列 SET IDENTITY_INSERT tablename ON --设置不允许显式插入自增列 SET IDENTITY_INSERT ta...
数据库主键自增问题
oracle: SELECT CMDB_SEQ.CURVAL FROM DUAL DB2: SELECT IDENTITY_VAL_LOCAL() as TREE_ID FROM SYS.TREE u can use section Cloudscape VALUES IDENTITY...
关于主键自增问题
请教一个是事情:rn我在做二次开发的时候rn发现一种处理表自增的方式:所有表的Id主键都是Nvarchar(10),所有表的ID 最大值 都统一存放在另一个表(表.A,两列:一列是常规表的标示。一列是常规表ID的最大值)里面。在每次插入数据的时候,都往表.A 查询。返回对应的ID最大值+1,通过这种方式做表的ID自增唯一处理。最后把表.A的最大值更新。rn rn这种方式有什么好处?rn我找到比较靠谱的答案是 很久以前只有数据库只有int16 处理大数据自增的时候 会超过临界。所以用这种方式。rn rn不知道还有没有其他答案。rn rn我在考虑要不要去掉这种方式,因为过多的查询,太影响数据批量插入的速度。
Hibernate3主键自增问题
我的系统要跨平台使用,所以想通过native来自动选择主键自增。rn可是在ORACLE中不能实现自增。rnSpring2.0+Hibernate3rnMAP:rnrn rn rn程序中:rnuser.setName("aaa");rnuserService.save(user);rn-----------------------------rn将native改成increment能实现自增。rnHIBERNATE_SEQUENCE已创建rn我已经无语了。各位大虾帮忙。。。
sqlite主键自增问题
怎么设置ID字段为主键自增呢,网上的方法可以实现,但是如果删除最后一条或多条记录时,在新插入记录,它会按现在有的自增rn如:ID: 1 2 3 三条记录,删除2 3 两条记录后,在插入一新记录 ID=2,怎么让这新记录的ID=4呢?
sqlserver 自增主键问题
现在表两个字段 MyID(自增主键) MyName rn现在插入数据 rn1,arn2,brn3,crn然后删除2,brn再插入2,brnrn数据库里面的记录是rn4,brnrn而且如果再插入1,arn数据库按道理来说应该是报主键重复的错误呀,但是也插入进去了rn是 5,arnrn不知道我描述清楚。希望得到解答rn
sqlldr主键自增的问题
我用sqlldr命令可以将EXECL内容导入ORACLE数据库,但是现在有一个问题,我的数据库的第一字段是id,它是自增字段,我想导入数据的时候不导入这个字段,让这个字段按照序列自动往下增加,这个该如何写呢?
ORACLE 主键自增问题
在网上查询了下ORACLE如果实现自增的话,得创建序列和创建触发器。我照着代码试了半天可是没有成功。rn比如有个例子是这样的:rnoracle的自增是由序列来实现的 rn create table students rn (id number, rn name varchar(8)); rn 再建序列 rn create sequence id increment by 1 start with 1000; rn insert into students(id,name) rn values(id.nextval,"hello"); rnrn id.nextval 不能用呢,好像不认。rn 请明白的哥们解释下啊,最好能解释下 有触发器的那种。谢谢
类似主键(自增)的问题。
我想实现一个如主键那样子的,可以自增,就算删除了这一行,也会按这一行的ID自增,(我想实现的是ID自增,单据号也会改变。可是同时存在会报错)在线等,不明白可以回复。先谢谢了。
添加记录同步关联问题?
问题如下:rn表1(字段:);rn表2(字段:
mysql解决添加失败主键自加问题
<?php     function login(){         $user=$_POST["user"];         $birthday=$_POST["birthday"];         $userpass=$_POST["userpass"];         $username=$_POST["username"];         $telno=$_POST["te...
关于postgresql自增主键和自定义自增主键
postgresql设置自动增长主键是使用 serial 关键字:CREATE TABLE test( id SERIAL PRIMARY KEY, spu_id BIGINT ) `` 这种方式比较简单方便,但是这种默认的是从1开始自增长。当我们想自定义增长的时候可以采用另外一种方式:` CREATE TABLE test( id
【MyBatis】——自增主键与非自增主键返回
mysql自增主键,执行insert提交之前自动生成一个自增主键。当时一直没有想为什么要返回主键,也就是返回就返回了吧,总是有用的,确实,返回来有可能会作为下一次查询的依据,或者下一个插入的外键的凭证,总之,先返回来再说…… 实现思想是酱紫的:通过mysql函数获取到刚插入记录的自增主键:LAST_INSERT_ID(),但是是在insert之后调用此函数。
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池