CRM을 만들려고하는이 방법이 있습니다.CRM 2016 일반 생성 또는 업데이트 방법 초기 바인딩 엔티티
internal Guid CreateOrUpdateRecord(Entity entity)
{
var guid = Guid.Empty;
if (entity.Id == null || entity.Id == Guid.Empty)
{
guid = _serviceProxy.Create(entity);
}
else
{
_XRM.UpdateObject(entity);
_XRM.SaveChanges();
//_serviceProxy.Update(entity);
guid = entity.Id;
}
return guid;
}
그것이 내가 내 코드 그냥 변수를 설정할 수 있도록 객체가 신규 또는 CRM에서받은 경우 신경 및 저장하거나 업데이트하려면이 방법을 던질 필요가없는 것을 존재의 목적. 이걸로 나는 매번이 문제를 다루는 여러 장소의 구조체를 만들 필요가 없다. 나는 이것을 여러 엔티티 유형에 사용하고있다.
그러나이 코드는 업데이트 방법에 약간의 슬픔을줍니다. 컨텍스트는 현재 'XXX'실체를 추적하지 않습니다
:
이 코드
_XRM.UpdateObject(entity); _XRM.SaveChanges()
던져하는 경향이있다.
이
_serviceContext.Update(entity);
예외 :
을 변경해야합니다EntityState가 (메시지를 만들기 위해) 등재, null로 설정하거나 는 CRM C 번호를 (업데이트 메시지)
그래서, 어떻게 하나의 방법을 만들어야하는지에 대한 제안은 던질 수 있습니다 Entity
을 입력하면 그에 따라 업데이트되거나 생성됩니다.
업데이트 가 방법의 업데이트 부분을 변경 :
{
if(_XRM.IsAttached(entity) == false)
{
_XRM.Attach(entity);
}
_XRM.UpdateObject(entity);
_XRM.SaveChanges();
guid = entity.Id;
}
이 가장 좋은 방법이지만, 그것을 작동하는 것 같다 확실하지.
Defo on 2011? 2015/2016에는이 https://msdn.microsoft.com/en-gb/library/dn932135(v=crm.7).aspx에 대한 upsert 함수가 있으며, 또한 'entity.Id == null'은 무의미한'Guid '는'struct'이고'null '이 될 수 없습니다. –