gpt4 book ai didi

c# - 具有一对一关系的 EF Core 批量插入

转载 作者:行者123 更新时间:2023-12-04 12:20:47 24 4
gpt4 key购买 nike

我正在尝试在 .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; }
}

然后我插入一个 Entity1 项目列表
 _context.BulkInsert(Entity1ItemsList);

这仅适用并在我的数据库中插入 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");

最佳答案

四处搜索后,我想我找到了解决方案。首先设置以下配置

var bulkConfig = new BulkConfig()
{
SetOutputIdentity = true,
PreserveInsertOrder = true
};

运行初始 bulkconfig 以插入 Entities1List 并从 SQL Server 获取唯一 ID
_context.BulkInsert(Entity1ItemsList, bulkConfig);

现在分配了唯一的主键,以便将它们的值设置为它们的相关实体使用
foreach (var item in Entity1ItemsList)
{
item.Entity2Obj.Entity1_ID = item.ID;
}

这将设置正确的外键值。然后我批量插入 Entities2List
var Entities2List = Entity1ItemsList.Select(u => u.Entity2Obj).ToList();
_context.BulkInsert(Entities2List);

我希望通过只使用一个 BulkInsert 来做一些更简单的事情,它会自动添加所有导航属性而不是 2。但这行得通,而且速度很快。

关于c# - 具有一对一关系的 EF Core 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61398094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com