EF Core 在一个数据库访问中更新多个实体或将它们拆分
EF Core updating multiple entities within one database access or split them up
我必须决定以下问题:
2 个对象(即订单和预算,此处已简化):
class Order {
double Price;
}
class Budget{
double InternalBudget;
double ProjectBudget;
}
现在下面的问题:
添加新订单时,预算也必须更新。
现在,更好的方法是什么:
在一个数据访问方法中同时执行这两项操作,例如:
Order SaveOrderAndUpdateRemainingBudget(Order order, budget updateBudget)
{
// add/update both to DB and dbContext.SaveChanges()
}
或
Order UpdateOrder(Order order)
{
// update order
}
Budget UpdateBudget(Budget budget)
{
// update budget and dbContext.SaveChanges()
}
我对第二种方法的看法:如果更新预算失败,我的数据库状态不一致,订单已插入但预算值已过时。
关于最佳处理方式的任何建议?
我会做的是像您一样拥有 UpdateOrder 和 UpdateBudget 方法,但它们不会保存在这些方法中。所以你会这样做...
UpdateOrder(order);
UpdateBudget(budget);
dbContext.SaveChanges();
这样订单被封装在它自己的存储库中,而预算在另一个存储库中。
然后保存修改就完成了。
你的选项 2 会像你说的那样产生问题。
每个实体都应该自己负责,除非绝对必要,否则对其他实体一无所知。请记住,在理想世界中,方法应该只做一件事,请牢记这一点。
我必须决定以下问题:
2 个对象(即订单和预算,此处已简化):
class Order {
double Price;
}
class Budget{
double InternalBudget;
double ProjectBudget;
}
现在下面的问题: 添加新订单时,预算也必须更新。 现在,更好的方法是什么:
在一个数据访问方法中同时执行这两项操作,例如:
Order SaveOrderAndUpdateRemainingBudget(Order order, budget updateBudget)
{
// add/update both to DB and dbContext.SaveChanges()
}
或
Order UpdateOrder(Order order)
{
// update order
}
Budget UpdateBudget(Budget budget)
{
// update budget and dbContext.SaveChanges()
}
我对第二种方法的看法:如果更新预算失败,我的数据库状态不一致,订单已插入但预算值已过时。
关于最佳处理方式的任何建议?
我会做的是像您一样拥有 UpdateOrder 和 UpdateBudget 方法,但它们不会保存在这些方法中。所以你会这样做...
UpdateOrder(order);
UpdateBudget(budget);
dbContext.SaveChanges();
这样订单被封装在它自己的存储库中,而预算在另一个存储库中。 然后保存修改就完成了。
你的选项 2 会像你说的那样产生问题。
每个实体都应该自己负责,除非绝对必要,否则对其他实体一无所知。请记住,在理想世界中,方法应该只做一件事,请牢记这一点。