1.roomStatusRecord = this.roomStatusRecordDao.Insert(roomStatusRecord); 2.roomClean = this.roomCleanDao.Insert(roomClean);
3.db.SaveChanges();
---------------------------------------------------------------------------------------
程序执行顺序如此排序,现需求为第一个insert之后拿到自增长ID,可是savechanges()是在最后执行保证两个方法的事务,所以这样的需求如何能拿到roomStatusRecord的自增长ID来赋值给roomClean对象可以顺利的插入进去呢,roomStatusRecord的自增长ID是roomClean的外键。
直接返回DBSET<T>.ADD(T)之后的实体,后面直接就可以使用这个类的自增长属性了。
Tips:
调试的时候会始终显示为0,但是实际在程序执行到savechanges时根据先后顺序,后一个是可以拿到前一个自增长ID的。调试半天都是0,但是发现数据库还是成功插入了。
说的好像真的可以似的,结果还是不可以 ef6 +mysql 返回的ID一直是0
我的ef6.0+sqlserver,调试的时候是0,实际插到数据库中的是正确的值
想问一个问题,自增ID真的如此不可舍弃吗?
用 sql 怎么实现?
跟MVC框架有个屁关系。
是EF的事情吧。自增的ID我记得EF插入的时候会自动返回并赋值给原来的实体对象。也就是你这个对象savechange后,自增ID就有值了
如果建好关系了,应该可以直接保存,要不然 一个一个来
数据都没被执行 高并发的情况下你拿到的“自增长ID” 又有何用?,还是老老实实的用GUID吧
同三楼,确实可以保存后得到ID。先保存第一个Insert 然后roomStatusRecord.ID就可以得到数据库中的ID
你insert了之后查一下当前有多少个实体,然后实体数-1不就是自增的id了么
老老实实用Guid+1。
当前有多少个实体,然后实体数-1<-这种做法不可取,高并发下有错误。
sql的话,用output关键字。返回插入后的主键。