2017-05-08 35 views
0

我有一個DataContextLINQ,轉換表列出並插入新記錄

public class DatabaseCatalogue : DataContext 
{ 
    // other stuffs ... 

    public Table<IngramProduct> IngramProducts; 
} 

我的IngramProducts表加載到一個列表:

private List<IngramProduct> ingramProducts = 
     (from ingramProduct in dbCatalogue.IngramProducts 
     select ingramProduct).ToList(); 

如果我改變的一個值這個列表中的一個對象的屬性,然後調用dbCatalogue.SubmitChanges();,它被保存到數據庫中。

但是,如果我創建一個新對象並將此對象插入列表中,它將不會保存爲表中的新記錄(當調用SubmitChanges時)。

我的問題是:如何將新對象添加到列表中並將其保存爲數據庫中的新記錄(調用SubmitChanges方法)?

+1

_「如果我創建一個新對象並將該對象插入到列表中,它不會被保存爲表中的新記錄」_ ...是否將它添加到'Table'中,或者只是添加到「Table」中'List'?因爲如果只將它添加到'List'中,那麼'Table'如何知道它有一個新的行要保存? –

回答

0

你有你的新產品添加到原Table,如果你想打電話SubmitChanges()後堅持這個對象:

dbCatalogue.IngramProducts.InsertOnSubmit(myNewIngramProduct); 

呼籲ToList在DB中,做出詢問和收集內得到兌現後List,現在與原始Table無關。

+0

認爲這可能是解決方案,但對我來說有點混亂(對LINQ來說是新手,所以我的問題看起來很愚蠢):爲什麼如果我在列表中更改一個對象,它將被保存到數據庫記錄中該列表看起來與該表無關),但是當我將一個新對象添加到列表中時,它不會被保存到數據庫中? 像List <> _list =().ToList這樣的聲明並不意味着_list是指向括號之間的「list version」的指針? – BenjiK

+0

Change Tracker跟蹤單個對象,當調用SubmitChanges時,對其成員的更改會反映到數據庫中。當你調用ToList時,* collection *(列表本身)就是查詢的*投影*。這個列表與原始上下文無關,只是單個對象的容器。 –

+0

有關詳細信息,請參閱[文檔](https://msdn.microsoft.com/en-us/library/bb386982(v = vs.110).aspx) –