【发布时间】:2018-12-13 03:35:06
【问题描述】:
我正在使用实体框架。下面是我的 ActorsDao 类中 Actors 上下文的列表方法示例。如果您想象我的应用程序类似于 imdb,那么将会有针对各种其他上下文(如电影、导演、流派、评论、工作室等)的 CRUD 方法。
无论方法或上下文如何,我都以相同的方式处理错误。由于我在许多上下文中使用了许多方法,因此我的 catch 部分始终完全相同。
显然,我可以创建一个错误处理类,将代码放入其中,然后从 catch 块中调用该类中的方法。
但是,我想知道是否有办法从每个方法中省略 TRY...CATCH 并为我的实体框架层中的方法设置全局错误处理程序?
我只希望这个全局错误处理程序处理这些错误,而不是来自应用程序其余部分的错误。
我似乎记得在 Java Spring 中,您可以使用方法名称注释类或方法,所有错误都将传递给它,而无需 TRY...CATCH。我想知道.NET(或具有此类功能的第三方库)是否有类似的东西?
public List<Actor> ListActors()
{
List<Actor> actorList = new List<Actor>();
using (var context = new ActorContext())
{
try
{
actorList = context.Actors.ToList<Actor>();
}
catch (Exception e)
{
//Handle error code
}
}
return actorList;
}
编辑
我做了更多的研究,并从这里https://stackoverflow.com/a/4851985/1753877找到了这段代码
private void GlobalTryCatch(Action action)
{
try
{
action.Invoke();
}
catch (ExpectedException1 e)
{
throw MyCustomException("Something bad happened", e);
}
catch (ExpectedException2 e)
{
throw MyCustomException("Something really bad happened", e);
}
}
public void DoSomething()
{
GlobalTryCatch(() =>
{
// Method code goes here
});
}
使用这样的委托可以吗?确实符合我的要求。
【问题讨论】:
-
您可以删除
try/catch块并在高层实现一些东西,在那里您可以使用您的存储库或服务。也许如果您使用asp.net mvc,您可以使用属性来装饰控制器上的操作并处理架构上任何层上的任何错误。
标签: c# .net entity-framework error-handling