DKa*_*Kar 4 .net c# sql-server entity-framework-core asp.net-core
我正在尝试在 .NET Core 2.1 中使用来自 EFCore.BulkExtensions 的批量插入,并具有一对一的关系。我有 2 个数据库实体
public partial class Entity1
{
public int ID { get; set; }
public virtual Entity2 Entity2Obj { get; set; }
}
public partial class Entity2
{
public int ID { get; set; }
public int Entity1_ID{ get; set; }
public virtual Entity1 Entity1Obj { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我插入一个 Entity1 项目列表
_context.BulkInsert(Entity1ItemsList);
Run Code Online (Sandbox Code Playgroud)
这仅适用并在我的数据库中插入 Entity1 对象。不插入关联的 Entity2 项目。有没有办法实现这一目标?
导航属性在 Scaffold-DbContext 期间自动创建(数据库优先)
entity.HasOne(d => d.Entity1 )
.WithOne(p => p.Entity2)
.HasForeignKey<Entity2>(d => d.Entity1_ID)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Entity1_Entity2");
Run Code Online (Sandbox Code Playgroud)
四处搜索后,我想我找到了解决方案。首先设置以下配置
var bulkConfig = new BulkConfig()
{
SetOutputIdentity = true,
PreserveInsertOrder = true
};
Run Code Online (Sandbox Code Playgroud)
运行初始的 bulkconfig 以插入 Entities1List 并从 SQL Server 获取唯一 ID
_context.BulkInsert(Entity1ItemsList, bulkConfig);
Run Code Online (Sandbox Code Playgroud)
现在分配了唯一的主键,以便将它们的值设置为它们的相关实体使用
foreach (var item in Entity1ItemsList)
{
item.Entity2Obj.Entity1_ID = item.ID;
}
Run Code Online (Sandbox Code Playgroud)
这将设置正确的外键值。然后我批量插入 Entities2List
var Entities2List = Entity1ItemsList.Select(u => u.Entity2Obj).ToList();
_context.BulkInsert(Entities2List);
Run Code Online (Sandbox Code Playgroud)
我希望通过只使用一个 BulkInsert 来做一些更简单的事情,它会自动添加所有导航属性而不是 2。但这有效而且速度很快。
| 归档时间: |
|
| 查看次数: |
1609 次 |
| 最近记录: |