2009-02-25 38 views
0

我有一個linq對象,當某些方面發生變化並調用Save()方法時,我想「退休」。數據庫通過設置Terminated列來完成此操作,該列在設置時會導致對象在隨後的查詢中被忽略。我想做到這一點透明因此,例如:如何從方法調用中替換linq對象

DataContext db = new DataContext(); 
Foo bar = (from a in db.table 
      where a.pk == somevalue 
      select a).Single(); 

bar.Price += 2; 
Console.WriteLine(bar.pk); 
bar.Save(); 
Console.WriteLine(bar.pk); 

第二WriteLine()應比第一,因爲在拯救我創建了一個重複的對象,並用它取代酒吧的過程中不同的密鑰。基本上在保存方法中我想設置this = newObj;。是我想要的可能還是我以錯誤的方式去做?

回答

1

可以更改引用(或者更精確地持有這些變量),如果他們是通過引用傳遞:

class Foo { 
    ... 
    public static void Save(ref Foo obj) 
    { 
    var newObj = obj._save() //your implementation 
    obj = newObj; 
    } 
} 

有沒有其他辦法改變的引用。原因是,對象不知道它們被引用的地方。 Foo對象不知道對它的任何引用。

如果您想要在代碼中概述的確切行爲,唯一的方法就是更改Foo實例的內容,即使用更新的值覆蓋每個字段。

希望這會有所幫助。

0

另一種方法是從Save()方法返回新的對象;如果Save()方法不是對象的一部分,這可能更有意義。例如:

var dataPersister = new DataPersister(); 
var obj = dataPersister.Load(somevalue); 
obj.Price += 2; 
var newObj = dataPersister.Save(obj); 

在這些調用之後,obj仍然會指向原始對象,newObj會是保存後的結果。

相關問題