2017-05-08 56 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) –