11

我们能够毫无问题地创建新实体,但是在插件中更新现有实体这似乎不起作用。这是针对 CRM 2011 的。

var crmContext = new CustomCrmContext(service);

var contact = crmContext.Contact.FirstOrDefault(c=>c.Id == targetEntity.Id);

contact.new_CustomField = "Updated";

crmContext.SaveChanges();
4

3 回答 3

15

如果您已经拥有 ID,则无需下载整个联系人记录,并且只需更新一两个字段。您也不需要 OrganizationServiceContext - 只需要服务。尝试类似:

var c = new contact() {
  Id = targetEntity.Id,
  new_CustomField = "Updated"
}

service.Update(c);

这将节省首先查询联系人的往返过程。

于 2011-05-25T21:20:25.170 回答
13

您必须将对象标记为已修改才能将其提交到服务器。请参阅OrganizationServiceContext.UpdateObject(实体)

您应该在 crmContext.UpdateObject(contact);之前添加crmContext.SaveChanges();

于 2011-02-22T11:56:28.007 回答
1

LINQ 很好,只需创建新对象或列表并在 linq 中循环列表并更新:

using (var crm = new XrmServiceContext(service)){
var foo = crm.nmipcs_productpriceitemSet
    .Where(ppis => ppis.nmipcs_Account.Id == account.Id).ToList();

foreach (var nmipcsProductpriceitem in foo){
    var f = new nmipcs_productpriceitem
    {
    Id = nmipcsProductpriceitem.Id                 
    ,
    nmipcs_PriceSalesChannel = (decimal) 9.99
    };

    service.Update(f);
}
    }
于 2012-03-22T20:02:09.920 回答