2008-10-23 21 views
3

我有一個ADO.Net數據服務,我正在使用它來執行數據導入。有大量實體鏈接到一些實體。在導入過程中,我首先創建這些實體,然後保存它們,然後使用.SetLink(EntityImport,「NavigationProperty」,CreatedEntity)。現在我遇到的第一個問題是上下文並不總是知道有關CreatedEntity(這是由於每個實體獨立導入並創建了每個項目創建的上下文 - 我想保留這個功能 - 即我試圖避免「只使用一個上下文」作爲答案)。在ADO.Net數據服務中,如何檢查實體是否已經在上下文中?

所以我有一個.AddToCreatedEntityType(CreatedEntity)在嘗試調用SetLink之前。這當然是第一次,但第二次我得到錯誤信息「上下文已經跟蹤實體」。

有沒有辦法檢查上下文是否已經在跟蹤實體(context.Contains(CreatedEntity)還沒有實現)?我正在考慮試圖嘗試一次嘗試,並避免錯誤,但似乎每次都會創建一個新的CreatedEntity。它看起來像我需要使用LINQ到數據服務每次獲得該創建實體,但這似乎效率低下 - 任何建議?

回答

5

我想你應該看看你的實體的EntityState屬性。

只有它的EntityState.Detached值比您必須將其添加到您的上下文。

不要忘了如下評論:

此枚舉有一個FlagsAttribute 屬性,允許其成員值按位 組合。

我想創建一個擴展方法:

public static class EntityObjectExtensions 
{ 
    public static Boolean IsTracked(this EntityObject self) 
    { 
     return (self.EntityState & EntityState.Detached) != EntityState.Detached; 
    } 
} 
3

當試圖檢查上下文是否被跟蹤,我想更新實體(或增加),我非常disapointed當我發現上下文.Entites.Contains(currentItem)不起作用。

if (context.Entities.Where(entities => entities.Entity == currentItem).Any()) 
{ 
    this.service.UpdateObject(currentItem);      
} 
+1

如果沒有,做什麼:

我用了它周圍。這意味着什麼是其他部分? – Mohanavel 2010-08-05 14:18:02

相關問題