在将MVC与Entity Framework和Repository模式一起使用时如何处理异常

时间:2014-06-11 20:06:19

标签: asp.net-mvc entity-framework repository-pattern

我一直在阅读一些教程和示例代码,试图学习单元测试和存储库模式,我试图弄清楚如何使用隐式声明的类型处理异常。

例如,假设我使用以下内容创建和发布对象。

var issue = issueRepository.GetIssueById(issueId);

如果我在try catch块中创建它,那么变量将只限于try,所以我必须在try中包含与此相关的所有内容。我可以在尝试之外将问题声明为一个新问题,但我一直在阅读的最佳实践建议说尽可能使用隐式。将try catch放在存储库中更好吗?如果是这样,你会如何回到控制器?

很抱歉,如果问题很简陋,但我还没有找到任何可以使用这些模式进行异常处理的示例代码。

1 个答案:

答案 0 :(得分:0)

一种方法是这样,但这种方式是在Repository级别推动异常,这将使调用者更多地关注业务规则。

public abstract class BaseRepository<TYPE, IDTYPE>
{
  public TYPE GetById(IDTYPE id)
    {
        return getById(id);
    }

   protected abstract TYPE getById(IDTYPE id);
}

public class IssueRepository : BaseRepository <Issue, int>
{
    protected override Issue getById(int id)
    {
        var result = context.Issues.FirstOrDefault(i => i.Id == id);
        // or even do First() which would throw exception if not found

        if (result == null)
        {
            throw new NotFoundException("Issue was not found with Id: {0}", id);
        }
        return result;
    }
}