C#实体框架:插入子实体并更新父实体,一个事务

C#实体框架:插入子实体并更新父实体,一个事务,c#,.net,linq,.net-core,entity-framework-core,C#,.net,Linq,.net Core,Entity Framework Core,如何在实体框架中添加新的子记录并更新ParentId引用键 我们有一个Employee和一个ProductSales表 Employee表包含最新的ProductSaleId列 如果我向ProductSale添加一个新条目,它将在SQL Server数据库中获取一个新的标识列 lastProductSale = new ProductSale { Product = "Furniture", Amount= 1000, EmployeeId = 5}; _dbContext.

如何在实体框架中添加新的子记录并更新
ParentId
引用键

我们有一个
Employee
和一个
ProductSales

Employee
表包含最新的
ProductSaleId

如果我向
ProductSale
添加一个新条目,它将在SQL Server数据库中获取一个新的标识列

lastProductSale = new ProductSale { Product = "Furniture", Amount= 1000, EmployeeId = 5};
_dbContext.Add(productSale);
_dbContext.SaveChanges();
int lastProductSaleId = lastProductSale.productSaleId;
现在更新
Employee
表引用键,如下所示:

employee.ProductSaleId = lastProductSaleId;
_dbContext.SaveChanges();
我们知道员工ID是5。但是,这将从两个保存操作中获取两个事务

我希望这是在一个交易完成。如何完成这项工作

使用EF Core 3.1, 实体是用外键搭建的

资源:


已设置实体框架自动脚手架。 所以下面的方法奏效了, 不要使用
employee.ProductSaleId
,只需使用
ProductSale
,并直接更新父级

productSale = new ProductSale { Product = "Furniture", Amount= 1000, EmployeeId = 5};
employee.ProductSale = productSale;
_dbContext.SaveChanges();

实体框架核心将通过插入或更新自动调整

hi@develinformnate是的,我在DB中有一个外键设置,EFOh等待。。。LastProductSaleId只是最近售出的产品的id。对不起,我误解了你们的关系。据我所知,你必须做两次扑救。但是,您可以使用
TransactionScope
管理一次保存失败的情况。请注意,这是一个有问题的数据库设计。您应该避免存储
LastProductSaleId
,除非您完全知道,因为您尝试过,按需计算的速度太慢。是的,此数据库设计存在问题。在employee表中不需要LastProductSaleId。无论何时需要显示员工的最新销售,都可以使用employeeid+date获取最新的销售数据。无论如何,若你们想要一个事务,这是不可能的,因为你们需要使用savechanges来获得新的id。嗨@Asherguru我同意,我告诉db architect,只是做我的工作,但问题更概念化,在一个事务中插入子事务并更新父事务