2012-07-12 85 views
4

沒有人知道如何使用SDK for Dynamics CRM 2011將更改保存到後期綁定的實體?MS Dynamics CRM 2011 SDK - 使用後期綁定更新實體記錄

這是我已經試過:

// retrieve and modify a pet... 
// (This part works) 
Guid findId = new Guid("6CA57D73-30CC-E111-B155-00505630052F"); 
ColumnSet attributes = new ColumnSet(new string[] { "name", "foodtype" }); 

// try to retrieve 
// (this also works) 
pet = xrm.Retrieve("pet", findId, attributes); 
if(pet!=null) 
{ 
    Console.WriteLine(String.Format("Retrieved pet {0} successfully!", pet["name"].ToString())); 
    // update attributes 
    pet["foodtype"] = "Seaweed"; 
    // (from here doesn't seem to work) 
    // save pet 
    xrm.SaveChanges(); 
    Console.WriteLine("Done!"); 
} 

感謝所有幫助:)

+0

這是否養有什麼錯誤? – 2012-07-12 16:10:19

回答

6

試試這個:

pet["foodtype"] = "Seaweed"; 

xrm.UpdateObject(pet); 
xrm.SaveChanges(); 

編輯:"The context is not currently tracking the 'pet' entity"意味着你從Retrieve獲取對象是不附加到服務上下文。有一種方法Attach就是這麼做的。

xrm.Attach(pet); 
pet["foodtype"] = "Seaweed"; 

xrm.UpdateObject(pet); 
xrm.SaveChanges(); 
+0

這在UpdateObject上給出了一個錯誤:「上下文當前沒有跟蹤'寵物'實體」。 – CompanyDroneFromSector7G 2012-07-12 15:57:58

+0

我已經找到了一個解決方案(見下文),但你的答案是教育性的,它的工作原理,所以我接受你的答案。謝謝您的幫助 :) – CompanyDroneFromSector7G 2012-07-13 09:04:18

2

這工作:

pet["foodtype"] = "Seaweed"; 
pet.EntityState = EntityState.Changed; // not sure if this is really needed 
// save pet 
xrm.Update(pet);