Вопрос

NullReferenceException при сохранении Entity

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

System.NullReferenceException: Object reference not set to an instance of an object.
   at Terrasoft.Core.ProcessEngine.GetProcessListeners(UserConnection userConnection, Entity entity, EntityChangeType changeType)
   at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.TryProcessComplete(EntityChangeType changeType)
   at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.BaseEntitySavingScriptTaskExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.BaseEntityEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.EventEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Configuration.BaseEntity_Base_Entity_TerrasoftEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.BaseEntityEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.EventEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.Configuration.EventEventsProcess`1.ThrowEvent(ProcessExecutingContext context, String message)
   at Terrasoft.Core.Entities.Entity.ThrowEvent(String message, EventArgs eventArgs)
   at Terrasoft.Core.Entities.Entity.OnSaving(EntityBeforeEventArgs e)
   at Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired, Boolean setColumnDefValue)
   at Terrasoft.Core.Process.ZzzzRecalcTestProcessMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Код С#, в котором возникает исключение:

            var eventEsq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Event");
            var idFilter = eventEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "Id", eventId);
            eventEsq.Filters.Add(idFilter);
            var idColumn = eventEsq.AddColumn("Id").Name;
            var responseColumn = eventEsq.AddColumn("SxActualResponse").Name;
 
            var eventEntity = eventEsq.GetEntityCollection(userConnection).FirstOrDefault();
            if (eventEntity == null)
                throw new ArgumentException("Event с таким Id не существует в БД");
            var contactsCountEsq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact");
            var eventFilter = contactsCountEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "Event", eventId);
            contactsCountEsq.Filters.Add(eventFilter);
            var countFunction = contactsCountEsq.CreateAggregationFunction(AggregationTypeStrict.Count, "Id");
            var countColumn = contactsCountEsq.AddColumn(countFunction).Name;
            var resultEntity = contactsCountEsq.GetEntityCollection(userConnection).FirstOrDefault();
            var count = resultEntity.GetTypedColumnValue<int>(countColumn);
            eventEntity.SetColumnValue(responseColumn, count);
            eventEntity.Save();

Сталкивался кто-либо с подобной проблемой? Как её можно решить?

Нравится

3 комментария

Попробуйте в запрос "eventEsq" добавить все колонки функцией "AddAllSchemaColumns". Проблема может быть в том, что процессы которые выполняются при сохранении Entity обращаются к разным колонкам этой Entity, но они у вас не загружены и возникает исключение.

Добрый день!



Мне кажется Вам FirstOrDefault вернул Default, и там просто какой-то пустой объект Entity, у которого можно вызвать Save, но нет никаких колонок.

Колебянов Виталий Романович,

Да, проблема в этом была, похоже. После замены выбора конкретных полей на AddAllSchemaColumns - всё заработало.

Показать все комментарии