【发布时间】:2017-11-06 03:53:25
【问题描述】:
我有一个包含 2 个表的数据库:
Apartment: ID, Name, Address
Tenant: ID, Name, Phone, ApartmentID
每个公寓可以有多个租户,但每个租户只能住在一个公寓中。
还有一个 API 可以返回当前的公寓列表,以及该公寓中的租户列表作为 JSON 列表:
Apartments : [
{
Name: 'Sherwood',
Address: '21 Woody Lane' ,
Tenants : [
{ Name: 'Robin', Phone: '111-1111' },
{ Name: 'Hood', Phone: '222-2222' }
]
},
...
]
我需要将 API 结果解析为 2 个相关对象,公寓和租户,并将它们插入数据库。 API 返回的条目很多,大约 500,000 条。为了加快速度,我从以下方面获取了一些想法:Fastest Way of Inserting in Entity Framework
但是,该帖子中有一个概念我无法在我的解决方案中实现,即推迟 SaveChanges()。这就是我目前拥有代码(概念)的方式:
Foreach apartment
Insert apartment into DB
SaveChanges()
Get ID of inserted apartment
Foreach tenant in apartment
Insert tenant into DB, into apartment ID
上述结构的原因是,在插入租户行时,我需要该租户居住的公寓 ID,因此我需要在之前插入(并保存更改以获取 ID)公寓插入租户。
这会导致 SaveChanges() 被多次调用并损害性能。上述方案如何优化?
【问题讨论】:
标签: sql-server performance entity-framework bulkinsert