2011-08-01 120 views
1

我有一個方法在datalibrary看起來像這樣的LINQ to SQL更新對象

public IEnumerable<GeneralContractLine> getContractLines(int GeneralContractID) 
{ 
    return db.GeneralContractLines.Where(l => l.FKGeneralContractID == GeneralContractID); 
} 

public void UpdateContractLine(GeneralContractLine line) 
{ 
    //Update the object "line" 
} 

第一種方法是確定的,該數據庫僅僅是被更早initiliazied DataContext對象。

我想這樣做

更新方法:

db.GeneralContractLine.update(line); 
db.submitChanges(); 

我知道我能找到的對象,然後替換它更新,但有什麼更好的辦法?

回答

0

我可以預測,您使用db對象來獲取代碼中某處的GeneralContractLine對象,並對其屬性進行一些更改,並且希望保存這些更新,以便我的解決方案僅使用db.submitChanges( )並且在GeneralContractLine對象上完成的所有更改都將被保存。

+0

取決於常規合同行如何更改,通常與asp.net項目從數據上下文斷開連接,因此它不會保存提交更改 – Manatherin

+0

發生這種情況在一個不同的項目。所以我不認爲我可以更新這個項目。我正試圖在分隔項目中實現某種存儲庫模式。 – espenk

0

使用Linq to SQL,只需更改對象,然後在完成後調用SubmitChanges。

public void UpdateContractLine(GeneralContractLine line) 
{ 
    //Update the object "line" 
    line.PropertyX = "Foo"; 
    db.SubmitChanges(); 
} 
+0

我不想更改某些屬性,而是更新/替換它。此代碼位於dataAccess庫中,並且對該方法的調用可能來自不同的前端系統。因此,當涉及到這個存儲庫類時,屬性的更改已經完成。 – espenk

+0

在這種情況下,只需調用db.SubmitChanges()。 – Nathan

0

你可以做的是爲GeneralContractLine的Table類創建一個擴展方法,並在其中添加一個名爲Update()的方法。

public static class LinqToSqlExtensions 
{ 
    public static void Update(this System.Data.Linq.Table<GeneralContractLine> table, GeneralContractLine item) 
    { 
     var connectedItem = table.FirstOrDefault(x => x.ID == item.ID); 
     //Update logic in this case updating only the name 
     connectedItem.Name = item.Name; 
     table.Context.SubmitChanges(); 
    } 
} 

就像一個沒有,我沒有測試過任何這一點,但它可能是東西,是值得嘗試的

哦,如果它的工作原理,稱這應該只是一個在命名空間中添加使用語句,然後調用db.GeneralContractLine.Update(line);

+0

此外,如果這個工作,你需要爲多個實體做它可能會嘗試使用和反射更通用的版本 – Manatherin