3

有人可以建议 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 中最好的异常处理机制是什么?还有哪些具有事务的功能的最佳异常处理机制是什么,例如:

 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();

        }
4

1 回答 1

1

我认为您的 linq 查询运行良好。

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

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

尽管有财产存在的可能性null,你还是继续你的二传手。

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

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

我无法从您的帖子中判断这是否可以接受。(qaProperty.Id 是否为空?是否为零?为什么没有找到预期的属性?)

你有几个选择:

  1. 当属性为空时,创建一个新的并将其添加到您的事务中
  2. 当属性为空时优雅地转义并通知用户该属性未找到

回滚是不必要的。实体框架以前失败parentDataContext.SubmitChanges();过。如果SubmitChanges成功调用,则该工作单元中的所有记录都将被更新。

至于using方块,你可以把atry-catch插进去。

于 2012-11-01T14:05:43.470 回答