【问题标题】:Where to use the try/catch with a dataContext? (Dispose)在哪里使用带有 dataContext 的 try/catch? (处置)
【发布时间】:2015-02-27 17:19:02
【问题描述】:

好吧,我真的不知道何时或如何处理数据上下文。例如,我有这样的代码:

try
{
    using(MyEntities myDbContext = new MyEntities())
    {
         //My code that get entities from data base and work with them
    }
}
catch
{
    throw;
}

在这种情况下,如果我没记错的话,如果一切顺利,数据上下文就被处理掉了。但是,如果在我的代码中出现问题并引发异常,我的数据上下文是否已处理?

出于这个原因,我正在考虑另一种选择:

using(MyEntities myDbContext = new MyEntities())
{
    try
    {
        //My code
    }
    catch
    {
        myDbContext.Dispose;
        throw;
    }
}

在这种情况下,我将 dbcontext 丢弃在 catch 中,所以我认为它已被丢弃。但我不知道这是一个好的解决方案还是有其他选择。

使用 dbContext 和可用资源(主要是数据库连接)处理异常的最佳方法是什么?

非常感谢。

【问题讨论】:

  • 只需将每个资源(上下文、连接等)包装在using 中。不要打电话给.Dispose。不要添加try/catch
  • 如果您使用的是using,则无需担心。它将被 100% 处理
  • 您可能会觉得这很有帮助 - stackoverflow.com/questions/8309877/…
  • 好的,那么使用就足够了,但我有一个dobut。如果我需要捕获和异常,例如并发异常,是否与 using 在 try 中的 try 或在 using 中的 try 相同?

标签: entity-framework exception dbcontext


【解决方案1】:

这是确保Dispose()所需要做的所有事情

using(MyEntities myDbContext = new MyEntities())
{
     //My code that get entities from data base and work with them
}

相当于但不那么优雅:

MyEntities myDbContext = new MyEntities();
try{
  ... (your code)
}
finally{
   myDbContext.Dispose();
}

抛出、捕获或未捕获异常都没有关系...

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2022-01-13
    • 1970-01-01
    • 2010-10-06
    • 2016-07-02
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多