CRM 2011–Pluginy i namiastka z CrmSvcUtil

Korzystamy sobie z usługi sieciowej CRM 2011, budujemy własną strukturę obiektów, generujemy z tego namiastkę, wrzucamy wszystko do pluginu i …. patrzymy na błąd:
Unable to cast object of type 'Microsoft.Xrm.Sdk.Entity' to type 'Netwise.Crm.Sdk.Account'.
I co teraz ? Czy wszystko muszę przerobić na Entity i bawić się indekserami ? To tylko jedno podejście. Inne podejście, które może nas uchronić od tego pierwszego to wykorzystanie generycznej metody ToEntity<>. Zamiast kodu:
return (Account)service.Retrieve(Account.EntityLogicalName, accountId, new ColumnSet(Attributes.accountnumber));
Napiszemy kod:
return service.Retrieve(Account.EntityLogicalName, accountId, new ColumnSet(Attributes.accountnumber)).ToEntity<Account>();
Wtedy nasza początkowa praca nie pójdzie na marne i nie będziemy oglądać wyjątku.
Z kolei jak chcemy tworzyć obiekty przy pomocy IOrganizationService w pluginie nie musimy korzystać z Entity tylko możemy korzystać z wygenerowanych klas. Przykładowo tworząc nowego klienta zamiast pisać kod:
service.Create(_account);
Musimy zrobić:
service.Create(_account.ToEntity<Entity>());
W przypadku pierwszego kodu otrzymamy podobny błąd o rzutowaniu Account na Entity. Drugi kod zadziała bez problemu Uśmiech