如何在 table 与 Entity Framework 核心中插入数据并保存一次?
How to insert data in a joined table with Entity Framework Core with one save?
假设我有以下 table/class 结构用于 Entity Framework 核心。是否可以在对 SaveChanges
的一次调用中插入带有连接 table 的新记录?
我知道这可以通过 2 次保存(插入 TableB > 保存 > 插入 TableAB > 保存)完成,并且有一个类似的 这样做。
public class TableA
{
public int Id { get; set; }
public ICollection<TableAB> ABs { get; set; } = null!;
}
public class TableAB
{
public int TableAId { get; set; }
public TableA TableA { get; set; } = null!;
public int TableBId { get; set; }
public TableB TableB { get; set; } = null!;
}
public class TableB
{
public int Id { get; set; }
}
只需保存一次即可轻松插入多个相关对象 - 例如:
var b1 = new TableB();
var b2 = new TableB();
context.TableAs.Add(new TableA
{
ABs = new List<TableAB>
{
new TableAB
{
TableB = b1,
},
new TableAB
{
TableB = b2,
},
},
});
context.TableAs.Add(new TableA
{
ABs = new List<TableAB>
{
new TableAB
{
TableB = b1,
},
},
});
context.TableAs.Add(new TableA
{
ABs = new List<TableAB>
{
new TableAB
{
TableB = b2,
},
},
});
context.SaveChanges();
唯一稍微复杂的部分是当您需要从多个地方引用它们时保持对相关实体 (TableB
) 的引用。
这假定您的 Id
属性都是数据库中的 IDENTITY
列。如果没有,您需要手动分配它们。
假设我有以下 table/class 结构用于 Entity Framework 核心。是否可以在对 SaveChanges
的一次调用中插入带有连接 table 的新记录?
我知道这可以通过 2 次保存(插入 TableB > 保存 > 插入 TableAB > 保存)完成,并且有一个类似的
public class TableA
{
public int Id { get; set; }
public ICollection<TableAB> ABs { get; set; } = null!;
}
public class TableAB
{
public int TableAId { get; set; }
public TableA TableA { get; set; } = null!;
public int TableBId { get; set; }
public TableB TableB { get; set; } = null!;
}
public class TableB
{
public int Id { get; set; }
}
只需保存一次即可轻松插入多个相关对象 - 例如:
var b1 = new TableB();
var b2 = new TableB();
context.TableAs.Add(new TableA
{
ABs = new List<TableAB>
{
new TableAB
{
TableB = b1,
},
new TableAB
{
TableB = b2,
},
},
});
context.TableAs.Add(new TableA
{
ABs = new List<TableAB>
{
new TableAB
{
TableB = b1,
},
},
});
context.TableAs.Add(new TableA
{
ABs = new List<TableAB>
{
new TableAB
{
TableB = b2,
},
},
});
context.SaveChanges();
唯一稍微复杂的部分是当您需要从多个地方引用它们时保持对相关实体 (TableB
) 的引用。
这假定您的 Id
属性都是数据库中的 IDENTITY
列。如果没有,您需要手动分配它们。