如何在插件中使用LINQ更新CRM 2011实体?

时间:2011-02-22 06:31:13

标签: plugins dynamics-crm dynamics-crm-2011

我们能够创建没有任何问题的新实体,但更新插件中的现有实体似乎不起作用。这适用于CRM 2011。

var crmContext = new CustomCrmContext(service);

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

contact.new_CustomField = "Updated";

crmContext.SaveChanges();

3 个答案:

答案 0 :(得分:15)

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

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

service.Update(c);

这将首先保存查询联系人的往返次数。

答案 1 :(得分:13)

您必须将对象标记为已修改,以便将其提交给服务器。 见OrganizationServiceContext.UpdateObject (Entity)

你应该添加 crmContext.UpdateObject(contact);之前的crmContext.SaveChanges();

答案 2 :(得分: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);
}
    }