首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有一对一关系的EFCore BulkInsert

具有一对一关系的EFCore BulkInsert
EN

Stack Overflow用户
提问于 2020-04-24 06:34:44
回答 2查看 1.9K关注 0票数 5

我尝试在.NET Core2.1中使用来自EFCore.BulkExtensions的bulkinsert与一对一的关系。我有2个数据库实体

代码语言:javascript
复制
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项目列表

代码语言:javascript
复制
 _context.BulkInsert(Entity1ItemsList);

这只适用于在我的数据库中插入Entity1对象。不会插入关联的Entity2表项目。有没有办法做到这一点?

导航属性是在Scaffold-DbContext期间自动创建的(首先是数据库)

代码语言:javascript
复制
entity.HasOne(d => d.Entity1 )
    .WithOne(p => p.Entity2)
    .HasForeignKey<Entity2>(d => d.Entity1_ID)
    .OnDelete(DeleteBehavior.ClientSetNull)
    .HasConstraintName("FK_Entity1_Entity2");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-24 19:35:05

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

代码语言:javascript
复制
var bulkConfig = new BulkConfig()
{
    SetOutputIdentity = true,
    PreserveInsertOrder = true
};

运行初始批量配置以插入Entities1List并从SQL Server获取唯一ID

代码语言:javascript
复制
_context.BulkInsert(Entity1ItemsList, bulkConfig);

现在分配了唯一的主键,以便将它们的值设置为它们的相关实体

代码语言:javascript
复制
foreach (var item in Entity1ItemsList)
{
    item.Entity2Obj.Entity1_ID = item.ID;
}

这将设置正确的外键值。然后I BulkInsert the Entities2List

代码语言:javascript
复制
var Entities2List = Entity1ItemsList.Select(u => u.Entity2Obj).ToList();
 _context.BulkInsert(Entities2List);

我希望有更简单的东西,只使用一个BulkInsert,它会自动添加所有导航属性,而不是2个。

票数 6
EN

Stack Overflow用户

发布于 2020-04-24 07:13:50

这可能就是您想要的,因为您还想插入子属性。

context.BulkInsert(Entity1ItemsList, options => options.IncludeGraph = true);

你可以阅读更多的here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61398094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档