如何使用EF核心使用外键将数据插入多个表?

时间:2019-06-12 16:10:41

标签: entity-framework-core

使用Entity Framework Core,将数据插入一个或多个包含第一个表的外键的新rcord到多个表中的最佳方法是什么?

给出以下实体:

public class ParentEntity
{
    public int Id {get; set;}
    public string Name {get; set;}
}

public class ChildEntity
{
    public int Id {get; set;}
    public int ParentId {get; set;}
    public string Name {get; set;}
}

我知道我可以使用此方法插入数据:

var parentEntity = new ParentEntity {Name = "Mom"};
var childEntity = new ChildEntity {Name = "Junior"};

await db.Parents.AddAsync(parentEntity);
childEntity.ParentId = parentEntity.Id;
await db.Children.AddAsync(childEntity);
await _context.SaveChangesAsync();

但是我可以看到这不会很好地扩展。我现在正在学习EF Core,找不到更好的方法来解决这个问题。

1 个答案:

答案 0 :(得分:2)

如果您真的只需要使用外键,那就是您应该这样做的方式。这就像手动SQL查询一样。

但是EF支持navigation property的概念。因此,您可以像这样定义类:

public class ParentEntity
{
    public int Id {get; set;}
    public ICollection<ChildEntity> Children { get; } = new List<ChildEntity>();
}

public class ChildEntity
{
    public int Id {get; set;}
    public int ParentId {get; set;}
}

然后像这样使用它

var parentEntity = new ParentEntity();
parentEntity.Children.Add(new ChildEntity());

context.Parents.Add(parentEntity); // parent and its children gets added
context.SaveChanges();