我们的服务层中有以下代码,我们使用 EF 将新用户添加到数据库中。
public User AddUser(User user)
{
using (var context = DataObjectFactory.CreateContext())
{
var userEntity = Mapper.Map(user);
context.AddObject("UserEntities", userEntity);
context.SaveChanges();
return Mapper.Map(userEntity);
}
}
这由服务层通过以下方法调用:
public UserResponse GetSubmitUser(UserRequest request)
{
var response = new UserResponse(request.RequestId);
var user = Mapper.FromDataTransferObject(request.User);
response.User = Mapper.ToDataTransferObject(UserDao.AddUser(user));
return response;
}
在到达 AddUser 之前,我们会进行某些客户端和服务器验证,但是我不确定如何处理未处理的异常。
例如,如果 context.SaveChanges() 以某种方式抛出错误,我们如何将错误详细信息返回到表示层?
我正在考虑将 try / catch 放在 AddUser 中,如下所示:
public User AddUser(User user)
{
try
{
using (var context = DataObjectFactory.CreateContext())
{
var userEntity = Mapper.Map(user);
context.AddObject("UserEntities", userEntity);
context.SaveChanges();
return Mapper.Map(userEntity);
}
}
catch (Exception)
{
return ??
}
}
但是 AddUser 的返回类型是 User 并且我不确定发生异常时应该返回什么。如果我可以将异常详细信息返回给 UserResponse 方法,我可以在我们的响应对象中填充一些字段,这些字段用于保存错误详细信息,但现在确定从 catch 部分中返回什么。
我试图了解如何识别应该在多层应用程序中捕获和处理的异常,一个具有数据访问层、服务层、表示层等的异常。主要是想弄清楚如何向用户展示异常详细信息解析度。
谢谢