2011-06-06 74 views
1

認爲我有我的數據上下文MYDC叫MyObject的對象列表定義如下:更新列表,DB與LINQ到SQL

public class MyObject 
{ 
    public int ObjectID {get;set;} 
    public byte ObjectState {get;set;} 
    public string ObjectInJson {get;set;} 
} 

我正在寫一個名爲ObjectsInJsonCache表的查詢;該表的列名與該對象的屬性相同。當我將MyObjects的列表接收到函數中時,如果它不在數據庫中,或者如果它已經存在,那麼我想要插入它。

用於查詢的功能如下:

public static in CreateJsonCache(List<MyObject> TheListOfobjects) 
{ 
    int NumberOfObjectsLoaded = 0; 

    using (MyDCdefinition MyDC = new MyDCdefinition()) 
    { 
     ObjectsInJsonCache TheTable = new ObjectsInJsonCache(); 

     //do I use a foreach loop? 
     //how do I switch insert/update? 

     // this?: MyDC.ObjectsInJsonCache.InsertOnSubmit... 
    } 
    return NumberOfObjectsLoaded; 
} 

我怎樣寫在LINQ到SQL查詢?特別是,如果列表包含1,000個項目,我不會與DB交談1,000次,所以我想知道是否使用foreach循環是要走的路。我需要什麼樣的查詢?一個InsertOnSubmit?

感謝您的建議。

回答

0

通常,您需要2個列表。 1列表已經在數據庫中,還有一個列表要更新。

你要做的是,你首先是得到所有不在數據庫中的對象。如何處理這些很簡單,只需InsertAllOnSubmit

您將需要2個數據庫命中。首先獲取所有對象,然後提交更改。

很難從你的例子中編寫完整的代碼,所以我只是要解釋。

要獲取所有不在數據庫中的項目,您需要輸入您的輸入列表並使用Except。如果您未使用由Linq創建的對象,則可能需要自定義比較器。另外,如果你沒有設置不在數據庫中的項目的ID,你可以檢查ObjectID == default(int);,如果是,它是一個新的。但這取決於你的ID處理。

要獲取已經在db中的項目,應該檢查Intersect。然後你循環它們然後更新它們。

在您使用SubmitChanges之前,沒有更新將發送到數據庫。

+0

好的,如果我只是做了一個Insert並且已經有一個元素會發生什麼;會跳過還是更新? – frenchie 2011-06-06 22:45:21

+0

@frenchie如果它在你插入的項目上設置了id,並且該項目已經在db中,則將引發異常 – 2011-06-07 09:15:05

+0

嗯,沒有什麼小事。 – frenchie 2011-06-07 12:53:53