【发布时间】:2020-08-07 10:04:47
【问题描述】:
我正在尝试在 .NET Core 2.1 中使用 EFCore.BulkExtensions 中的 bulkinsert 与一对一关系。我有 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");
【问题讨论】:
-
您是否为
Entity2Obj的每个Entity1ItemsList项目设置了数据? -
这里是经验法则:确保在
Entity1和Entity2之间正确配置了您的关系...这可能意味着使用 FluentAPi 配置它们,因为您具有导航属性...其次确保Entity1ItemsList中的所有对象都将数据传递给Entity2Obj -
是的,Entity1ItemsList 中的每个 Entity2Obj 项目都有数据。这些关系是在 Scaffold-DbContext 期间自动设置的,因为它首先是数据库。如果我对 Entity1ItemsList 的每个项目使用 context.Add() 和 context.SaveChanges(),则导航属性将成功填充。所以我认为关系配置正确。它不仅适用于 bulkinsert。
-
按照惯例,关系是自动的,但并非总是如此。尤其是在意识到您的
Entity2没有导航属性返回Entity1之后。 -
您可以添加
IncludeGraph选项并将其设置为true 吗? ...参考下面我的回答。
标签: c# .net sql-server asp.net-core entity-framework-core