如何使用()或try catch在C#中正确抛出错误?

时间:2014-01-27 01:42:44

标签: c# asp.net-mvc entity-framework try-catch using

所以我有一些代码,我很好奇如何抓住错误。我应该将一个查询包装在一个使用中,然后将其包装在try catch中吗?我在想以下是正确的吗?

    try
    {
        using (db)
        {
            string salt = BCryptHelper.GenerateSalt(6);
            var hashedPassword = BCryptHelper.HashPassword(user.Password, salt);

            User newUser = new User
            {
                EmailAddress = user.EmailAddress,
                PasswordSalt = salt,
                PasswordHash = hashedPassword,
                CreatedOn = DateTime.UtcNow
            };

            db.Users.Add(newUser);
            db.SaveChanges();
        }

        return true;
    }
    catch (SqlException exp)
    {
        throw new InvalidOperationException("Steam Id could not be added", exp);
    }

4 个答案:

答案 0 :(得分:2)

将其包含在trycatch和可能finally中以清理任何可能需要清理的内容是正确的方法。

将它包装在using中不会实现任何异常处理,但只会在您离开范围后处理实现using的{​​{1}}中包含的字段使用IDisposable

答案 1 :(得分:1)

try...catch(和可选finally)始终由运行时保证使用;这对于finally语句(documentation)尤为重要。对using(reference)也是如此。

但是,我会重构您的代码,以便在try / catch之外处理非数据库特定的操作 - 这样您就不会打开与数据库的连接,只是在您需要它之前还有其他东西失败。

答案 2 :(得分:0)

有很多,throw new Exceptionthrow exthrow它们都有自己的意义,请查看this以获取更多详细信息。

答案 3 :(得分:-2)

try catch无法捕获使用块内发生的异常。这会导致系统因未处理的异常而崩溃。

以下是崩溃的保证。我不确定这是由于实体框架。这对我来说很奇怪。

using (var entities = new AttritionRateEntities())
{
   try
   {
      var ent = entities.AttritionRatePerSetups.FirstOrDefault(