如何在实体框架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中?

如何在实体框架v4

看看这个实体框架的扩展,它与从4.x到6.x版本的EF兼容。

我已经用过几次了,效果很好。

编辑:

通过在存储过程中初始化项来解决PK问题,在一次调用中从存储过程中执行所有插入,以避免.NET代码处理插入和SQL Server 之间的数千次往返