【发布时间】:2018-06-23 02:40:50
【问题描述】:
我正在尝试使用 Asp.Net MVC 和 Entity Framework 创建一个最简单的 Web 应用程序。我实际上用它完成了几个项目,但对代码并不满意,所以我正在遵循一些更流行的方法来完成它。这是我的结构:
- 控制器获取请求,
- 我有包含业务逻辑的服务。他们还使用我的数据库上下文来更改数据库中的数据。我不想创建另一个数据库层,所以我正在使用它们,
- 我将我的服务注入到控制器(使用 Unity)并调用像
CustomerService.Delete(Id)这样的东西 - 我的服务根据 Id 删除数据。
所以我的控制器不包含任何逻辑或数据库操作,我的服务确实包含两者。我认为这是做事的好方法,但我有一个问题。
假设我第一次添加一个客户,并且有另一张桌子保持他们的余额,我想在第一次注册时包含 10 美元的奖金,当我调用我的 CustomerService.Add(Customer) 时,该方法也调用 CustomerService.AddBalance(Customer, 10)。在这些方法中我调用DbContext.SaveChanges,这是问题所在,我调用SaveChanges 2 次,如果CustomerService.AddBalance(Customer, 10) 由于某种原因失败,我仍然有客户数据,但没有余额。我知道我可以使用交易,但我该把代码放在哪里?如果我知道在请求完成之前有一个地方最后运行,我可以在那里打电话给SaveChanges(),它会工作,但我认为这也不是一个好主意。
基本上我想为每个请求拨打一次SaveChanges(),但我找不到合适的地方。
谢谢
【问题讨论】:
-
您可以一次添加到两个表并调用 SaveChanges 一次。它应该工作
标签: asp.net-mvc entity-framework dependency-injection transactions