2010-04-08 50 views
0

我的代碼如下所示:用linq更新一個實體到sql,我需要先調用attach嗎?

Entity e = new Entity(); 

e.name = "..."; 
e.blah = 234; 

MyDb.UpdateEntity(e); 


public static void UpdateEntity(Entity e) 
{ 
    using(MyDatacontext dc = new MyDataContext()) 
    { 

      dc. ????????? 
    } 

} 

所以,我該怎麼辦這裏刷新實體?

注意:我只是把它稱爲實體在這裏,它在我的項目中的其他東西。

回答

3

這真的取決於你的數據上下文。通常情況下,您的數據庫中的每個表都有一個對象。因此,例如,如果您有一個擁有訂單表的數據庫,那麼您的DataContext中會有一個Orders對象(通過將該表拖到設計器中的dbml文件中創建)。

因此,對於一個新的秩序,你woud做到以下幾點:

using (var ctx = new MyDataContext()) { 
    ctx.Orders.InsertOnSubmit(order); 

    ctx.SubmitChanges(); 
} 

,並保存訂單傳遞到客戶端和修改療法你這樣做:

using (var ctx = new MyDataContext()) { 
    ctx.Orders.Attach(order, true); 

    ctx.SubmitChanges(); 
} 
+0

+1附着。我總是忘記這一點。 – Mark 2010-04-08 21:44:53

1
dc.GetTable<Entity>().InsertOnSubmit(e); 
dc.SubmitChanges(); 

http://msdn.microsoft.com/en-us/library/bb763516.aspx

+0

'dc.InsertOnSubmit(E) '無效,因爲'InsertOnSubmit'操作是Table類的一個方法。即你需要做'dc.Etities.InsertOnSubmit(e)'。 – AxelEckenberger 2010-04-08 21:42:07

+0

@Obalix Yea ..我也看到了。 Woops。 :) – Mark 2010-04-08 21:42:57

+1

@Obalix dc.Entities'會更乾淨,但我喜歡有一個通用的存儲庫,所以'GetTable '對我來說效果更好。 – Mark 2010-04-08 21:44:30