gpt4 book ai didi

c# - 是否可以从内部用常量代码包装一个方法?

转载 作者:行者123 更新时间:2023-11-30 13:35:33 25 4
gpt4 key购买 nike

我有很多数据库查询,我想将它们包装在同一个 try-catch 样式的错误处理程序中。试图保持代码干燥我认为做这样的事情会很有效,但我找不到类似的东西。是否有任何其他方法或是否有可能做到这一点?

我想做一个这样的外部方法:

try
{
// I would like to put any method here
}
catch (DbEntityValidationException)
{
// Error handling
}
catch(DbUpdateException)
{
// Error handling
}
catch (InvalidOperationException)
{
// Error handling
}
catch (EntityException)
{
// Error handling
}

“//我想在这里放置任何方法”是我想放置这样的方法:

public DatabaseResultEnum DoSmth(int someId)
{
using ( var context = new TestingDatabaseEntities() )
{
// Any database action
}
}

如果只调用内部 ("DoSmth()") 方法而不是在第一个方法中放置一个 Action ,然后将参数传递给它,就像这个例子中那样:Generic Function wrapper 会非常方便。

提前致谢!

最佳答案

使用委托(delegate)。

所以调用者会使用如下代码:

result = ExceptionChecker((context) => {
// do something with the DbContext context
return results...
});

然后你在哪里

IEnumerable<TRes> ExceptionChecker<TRes>(Func<MyDbContext, IEnumerable<TRes>> function) {
try {
using (var ctx = new MyDbContext(...)) {
return function(ctx);
}
} catch (InvalidOperationException) {
// Handle...
} // etc.
}

当然,真正的代码应该使用 async/await 来避免在长时间运行的查询中阻塞线程。理想情况下,您可以更好地管理上下文实例,以利用 EF 对工作单元模式的支持(例如,每个 Web 请求有一个上下文),在这种情况下,DbContext 实例将传递给帮助程序.但这显示了方法。

关于c# - 是否可以从内部用常量代码包装一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51379738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com