我尝试在.NET Core2.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");发布于 2020-04-24 19:35:05
在四处寻找之后,我想我找到了解决方案。首先,设置以下配置
var bulkConfig = new BulkConfig()
{
SetOutputIdentity = true,
PreserveInsertOrder = true
};运行初始批量配置以插入Entities1List并从SQL Server获取唯一ID
_context.BulkInsert(Entity1ItemsList, bulkConfig);现在分配了唯一的主键,以便将它们的值设置为它们的相关实体
foreach (var item in Entity1ItemsList)
{
item.Entity2Obj.Entity1_ID = item.ID;
}这将设置正确的外键值。然后I BulkInsert the Entities2List
var Entities2List = Entity1ItemsList.Select(u => u.Entity2Obj).ToList();
_context.BulkInsert(Entities2List);我希望有更简单的东西,只使用一个BulkInsert,它会自动添加所有导航属性,而不是2个。
发布于 2020-04-24 07:13:50
这可能就是您想要的,因为您还想插入子属性。
context.BulkInsert(Entity1ItemsList, options => options.IncludeGraph = true);
你可以阅读更多的here
https://stackoverflow.com/questions/61398094
复制相似问题