问题描述:List<Dictionary<TB_A, List<TB_B>>> listInStock, Dictionary< TB_B, List<TB_C>> dicStockCard。
简单描述:(1)要新增多条A记录,一条A记录对应多条B记录,一条B记录对应多条C记录。
(2)表TB_A、表TB_B和表TB_C的主键Id都是自增列。
(3)表TB_A新增后生成的一条记录的Id被表TB_B多条记录引用,表TB_B新增后生成的一条记录的Id被表TB_C引用。
若是循环一条条插入,插入完以后立马取出自增Id可以实现功能,但是效率太低。
若做成批量插入,苦思冥想未能实现,求各位支招...
使用存储过程,把新插入的id返回出来
这个是没办法的。只能这样做。
如果你要提升效率,使用ORM,比如EF,你可以构建A实体,构建B并设置B的导航属性指向A,构建C并设置C的导航属性指向B,这样,你只要执行A的INSERT或UPDATE,则ORM会自动的、高效率的执行更新。
此外,要想达到你的需求又不使用ORM,则需要自己生成SQL或以某种格式把数据准备后通过存储过程来实现。
最后一个办法,就是生成多条SQL语句,组合成一个字符串执行。此时务必注意A的ID的获取。
最好使用存储过程, 对这种多表操作的话。
1、使用自增ID就是有这个问题的,没人让你一定用自增ID的。
2、批量插入数据这种事又不会经常做,效率不效率的有啥用。
在一个事务里插两次不行吗?
利用存储过程可以实现,注意获取新插入的自增Id。
先构建出datatable,这个应该很好弄,然后再用sqlbulkcopy批量插入,效率很高的
方法一:可以预先 获得 要插入数据库后的ID 生成,但是会出现并发状况,所以要加锁。
方法二:使用存储过程操作
这个项目的这个功能是通过批量执行sql实现的,sql中获取需要的自增的Id,谢谢各位