Проверьте, был ли объект уже добавлен в CrmServiceContext (перед сохранением) - PullRequest
0 голосов
/ 24 мая 2019

Я использую C # для чтения CSV-файла и загрузки содержимого в CRM. Файл содержит информацию о нескольких объектах, которые, возможно, потребуется создать / обновить. Я хочу использовать CrmServiceContext для внесения изменений и вызывать SaveChanges один раз в конце.

Проблема возникает, когда несколько строк ссылаются на одну и ту же учетную запись (или любую сущность, но я буду использовать учетную запись для этого примера), которой еще нет в базе данных.

Моя первоначальная идея состояла в том, чтобы запросить контекст AccountSet, чтобы узнать, существует ли учетная запись с заданным именем, и если нет, создать объект Account и использовать AddObject, чтобы добавить его в контекст. Это, однако, приведет к тому, что будет создано несколько копий, поскольку использование AddObject фактически не добавляет сущность в набор до тех пор, пока не будут сохранены изменения.

Я знаю, что мог бы просто делать SaveChanges после каждого нового объекта или использовать IOrganizationService.Create вместо этого, но это сделало бы загрузку более длительной, поэтому я бы предпочел избежать этого, если это возможно. Как лучше всего проверить, если объект с данным значением атрибута уже настроен для создания?

1 Ответ

0 голосов
/ 24 мая 2019

Используете ли вы тот же контекст? На самом деле он должен добавить новую сущность в контекст, даже если транзакция не отправлена, и вы можете получить ее до следующего добавления. Прикрепляете ли вы свою сущность после добавления ее в контекст?

https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/org-service/organizationservicecontext

Не могли бы вы предоставить код, который используется для добавления нового объекта?

Также вы можете проверить свои новые добавленные сущности с коллекцией GetAttachedEntities() (там добавлены все ваши незафиксированные изменения)

var ents = Context.GetAttachedEntities()
                .Where(x => x.EntityState.HasValue && x.EntityState.Value == EntityState.Created).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...