當使用linq刪除記錄時,我有一個奇怪的問題,我懷疑它與範圍變量(名爲source
)有關。刪除記錄後爲客戶所有目標都使用下面的語句檢索:linq'範圍變量'問題
var q = from source in unitOfWork.GetRepository<db_Target>().Find()
where source.db_TargetBase.db_Person.fk_Customer == customerID
select source.FromLinq();
其中FromLinq是extention方法上db_target:
public static Target FromLinq(this db_Target source)
{
return new Target
{
id = source.id,
LastModified = source.db_TargetBase.LastModified,
...
}
}
當一條記錄被刪除既db_Target
和db_TargetBase
被刪除。例如,當兩個用戶正在刪除記錄時,linq會嘗試檢索由user1刪除的user2的記錄,導致LastModified = source.db_TargetBase.LastModified
行發生崩潰,因爲db_TargetBase
爲null
。
使用下面的代碼問題不occure,只有非刪除的記錄檢索:
var q = from source in unitOfWork.GetRepository<db_Target>().Find()
where source.db_TargetBase.db_Person.fk_Customer == customerID
select new Target
{
id = source.id,
LastModified = source.db_TargetBase.LastModified,
...
};
這會生成兩個問題:
- 這到底是怎麼回事?我是否正在製作範圍變量
source
的副本,因爲我在擴展方法中使用它? - 如何「包裝」
return new Target
代碼?我在多個地方使用它,不想每次都複製它。使我的代碼難以維護。
TIA,
JJ
感謝您的回覆,您的解釋對我來說非常有意義。 但是,現在我正在度假,當我有時間的時候我會測試實施並給出適當的反饋。 – user124936 2009-06-21 21:40:17