Как обновить сущность CRM 2011 с помощью LINQ в плагине? - PullRequest
11 голосов
/ 22 февраля 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 ]

15 голосов
/ 26 мая 2011

Нет необходимости загружать всю запись контакта, если у вас уже есть идентификатор, и вам просто нужно обновить поле или два. Вам также не нужен OrganizationServiceContext - только Сервис. Попробуйте что-то вроде:

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

service.Update(c);

Это сохранит в первую очередь запрос контакта для контакта.

13 голосов
/ 22 февраля 2011

Вы должны пометить объект как измененный, чтобы отправить его на сервер. См. OrganizationServiceContext.UpdateObject (Entity)

Вы должны добавить crmContext.UpdateObject(contact); до crmContext.SaveChanges();

1 голос
/ 23 марта 2012

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);
}
    }
...