2017-01-04 5 views
1

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

이 가장 좋은 방법이지만, 그것을 작동하는 것 같다 확실하지.

+1

Defo on 2011? 2015/2016에는이 https://msdn.microsoft.com/en-gb/library/dn932135(v=crm.7).aspx에 대한 upsert 함수가 있으며, 또한 'entity.Id == null'은 무의미한'Guid '는'struct'이고'null '이 될 수 없습니다. –

답변

0

저는 엔티티를 만드는 것이 추가하지 않는다고 생각합니다. 따라서 첨부해야합니다. 이 방법은 업데이트시 대체 키를 허용하지 않으므로 다소 위험한 방법입니다. 이 경우, 엔티티는 Id를 갖지 않지만, 업데이트에 사용 된 대체 키를 정의하는 적절한 속성을 가져야합니다.