我总是在 UnitOfWork.Commit()
方法中看到 DbContext.SaveChanges()
。但是,当我从 DbContext 获取实体并更改属性时,UnitOfWork.Commit()
会将新实体值写回我的数据库,而无需任何验证。
我将避免使用集成的 DbContext.Configuration.ValidateOnSaveEnabled = true;
。
目前我不使用 UnitOfWork-Pattern。我在我的服务类中对每个插入/更新操作运行验证,如果验证成功,存储库调用 DbContext.SaveChanges()
。
如何避免使用无效实体的 UnitOfWork.Commit()
?
如果我在 ASP.NET MVC Controller 中使用 UnitOfWork 对象,正如它在这个答案中所建议的那样:
Where does Unit Of Work belong w/ EF4, IoC (Unity), and Repository?
...不能保证验证已完成。
最佳答案
你基本上就在那里。当您使用 UoW 时,您的存储库更新将独立于对数据存储的任何提交。只需将 DbContext.SaveChanges()
移动到新的 UnitOfWork.Commit()
方法(或直接使用 DbContext.SaveChanges()
作为您的commit 方法),并将验证逻辑留在存储库的 Insert
/Update
方法中。
using (var uow = new UnitOfWork())
{
var e1 = new Entity() { ... };
repo.Insert(e1); // validates e1 immediately
var e2 = GetExistingEntity();
e2.Value = 42;
repo.Update(e2); // validates e2 immediately
}
关于.net - 在哪里使用工作单元模式验证我的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508338/