2012-03-18 61 views
0

我有一個奇怪的問題,我不能從數據庫中獲取對象,然後重新附加它。我已經爲其他項目編寫了類似的代碼,但出於某種奇怪的原因,它會在此應用程序中引發以下錯誤:EntityKey屬性只能設置,LINQ2Entities

System.InvalidOperationException:僅當屬性的當前值爲null時才能設置EntityKey屬性。

這裏是我的代碼:

 Entities.Customer customer; 
     using (var context = new XXEntities()) 
     { 
      IQueryable<Entities.Customer> query = from a in context.Customers select a; 
       query = query.Where(c => c.CODE == "003046"); 
      customer = query.ToList()[0]; 
     } 


     using (var context = new XXEntities()) 
     { 
      context.Customers.AddObject(customer); 
      context.SaveChanges(); 
     } 
+0

可能是一個更好的選擇將離開附加的記錄。在其他地方執行所有業務邏輯,然後在完成所有要做的更改時,將包含更新數據的對象傳遞給查詢數據庫的方法,進行更改並保存更改,全部都在同樣的方法,以便記錄始終附加。按照自己的方式做,稍後會在某些時候導致問題。 – frenchie 2012-03-18 22:59:12

+0

我應該給這個問題更多的上下文,對不起,我正在做的是以下內容:GET OBJECT-> PARSE OBJECT TO DTO - > PASS DTO通過WS - > MODIFY DTO - > PASS DTO通過WS - > REMAP返回DTO TO ENTITY - >保存實體。問題是我鬆了所有相關的LINQ2Entities的東西,知道對象是新的還是已被修改。 – Joshy 2012-03-18 23:24:39

+0

它可能會以其他方式工作:使用Id = null附加一個新對象。不完全確定。 – 2012-03-18 23:28:42

回答

0

在2號地塊,

using (var context = new XXEntities()) 
    { 
     //context.Customers.AddObject(customer); 
     context.Customers.Attach(customer); 
     context.SaveChanges(); 
    } 

EntitySet.Add()手段添加對象。您想添加一個現有的對象。

+0

只是一個額外的問題,但不Linq2EF要求你先從其他環境中分離它? – Silvermind 2012-03-18 23:00:06

+1

@Silvermind:上半年的使用應該照顧到這一點。第一個上下文被丟棄。 – 2012-03-18 23:01:11

+0

謝謝。我本來可以記住錯誤,但在另一件事:) Linq2SQL我認爲這是必需的,因此我的問題。 – Silvermind 2012-03-18 23:03:21