如何在实体框架v4
本文关键字:框架 v4 实体 | 更新日期: 2023-09-27 17:59:37
我一整天都在寻找解决方案,但找不到,所以我来了,寻求帮助。
我有三张保存组的表&他们的联系人在我的数据库中。为了简单起见,将它们的名称视为table_1、table_2&表_3
表_1(分组表)
+----------+------+
| Group_Id | Name |
+----------+------+
| 1 | A |
| 2 | B |
| 3 | C |
+----------+------+
table_2(联系人表):
+------------+-------+--------+
| Contact_Id | name | number |
+------------+-------+--------+
| 1 | Jack | 123 |
| 2 | Sam | 456 |
| 3 | Alice | 789 |
+------------+-------+--------+
表3(接线表)
+-----------------+----------+------------+
| ContactGroup_Id | Group_Id | Contact_Id |
+-----------------+----------+------------+
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 2 | 3 |
+-----------------+----------+------------+
现在我正在阅读我的网络应用程序中的excel文件,然后将批量联系人添加到数据库中。使用EF4,这就是我要做的:
using (TransactionScope obj = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted, Timeout = TransactionManager.MaximumTimeout }))
{
for (int i = 1; i < totalrows; i++)
{
table_2 objTable_2 = new table_2();
objTable_2.name = "ABC";
objTable_2.number= "999";
entity.table_2.AddObject(objTable_2);
entity.SaveChanges();
table_3 objTable_3 = new table_3();
objTable_3.Group_Id = "1";
objTable_3.Contact_Id = objTable_2.Contact_Id;
entity.table_3.AddObject(objTable_3);
entity.SaveChanges();
}
}
现在,正如您所看到的,我每次都必须调用entity.SaveChanges()
才能获得自动生成的table_2
的PK,以便插入到table_3
中。对成百上千条记录这样做确实会减慢我的应用程序速度,我知道这样做很糟糕。
这方面还有其他工作吗?如果我使用任何第三方大容量插入扩展或在每几百条记录后调用SaveChanges()
来执行此操作,那么我如何为table_2
自动生成PK以插入到table_3
中?
看看这个实体框架的扩展,它与从4.x到6.x版本的EF兼容。
我已经用过几次了,效果很好。
编辑:
通过在存储过程中初始化项来解决PK问题,在一次调用中从存储过程中执行所有插入,以避免.NET代码处理插入和SQL Server 之间的数千次往返