Linq中最好的异常处理方法:

时间:2012-11-01 12:52:48

标签: c# linq exception-handling

有人可以在LINQ中建议最好的异常处理机制吗? 假设我有以下功能:

public List<test_dataRange> GetDataRange()
{
    testDataContext = new ParentDataContext(conn);
    List< test_dataRange > dataRange = (from pp in testDataContext. test_dataRanges
                                                    select pp).ToList();

    return dataRange;
}

LINQ中可以应用的最佳异常处理机制是什么? 对于具有Transaction的那些函数,最好的异常处理机制是什么, 例如:

 public void UpdateQAProperty(Data_QAProperty qaProperty)
        {
            parentDataContext = new ParentDataContext(conn);
            DbTransaction dbTransaction = null;
            parentDataContext.Connection.Open();
            dbTransaction = masterDataContext.Connection.BeginTransaction();
            parentDataContext.Transaction = dbTransaction;
            var property = (from y in parentDataContext. QAProperties
                            where y.Id == qaProperty.Id
                            select y).FirstOrDefault();
            property.Height = qaProperty.Height;
            property.Caption = qaProperty.Caption;
            property.Width = qaProperty.Width;
            property.Length= qaProperty.Length;

            parentDataContext.SubmitChanges();
            dbTransaction.Commit();

        }

1 个答案:

答案 0 :(得分:1)

我认为你的linq查询运行得很好。

var property = (from y in parentDataContext. QAProperties
                            where y.Id == qaProperty.Id
                            select y).FirstOrDefault();

但是,FirstOrDefault将返回符合条件的第一个对象,如果不存在则返回null。

尽管属性可能为null,但您仍然可以继续使用您的setter

 property.Height = qaProperty.Height;
 property.Caption = qaProperty.Caption;
 property.Width = qaProperty.Width;
 property.Length= qaProperty.Length;

这将引发异常,因为属性为null

我无法从你的帖子中看出这是否可以接受。 (qaProperty.Id是否为空?是零吗?为什么找不到预期的属性?)

你有几个选择:

  1. 当属性为null时,创建一个新属性并在事务中添加
  2. 当属性为null并且通知用户未找到属性时正常转义
  3. 回滚是不必要的。实体框架在达到parentDataContext.SubmitChanges();之前失败。如果成功调用SubmitChanges,则该工作单元中的所有记录都将更新。

    对于using块,您可以在其中粘贴try-catch