Skip to content
This repository was archived by the owner on Jun 7, 2020. It is now read-only.
This repository was archived by the owner on Jun 7, 2020. It is now read-only.

Присвоение пустого значения свойству модели #12

@AnnMalofeeva

Description

@AnnMalofeeva

В рамках тестирования функционала при проверке работы серверной части POST-запроса на редактирование варианта лабораторной работы было выявлено необычное поведение при обновлении модели варианта.

`[HttpPost]
public JsonResult EditVariant(string Number, string JsonArr, bool IntrVar, long variantId, long testPoolId)
{
	LabVariant labVar = _labRepository.GetLabVariantById(variantId);
	long labId = labVar.LabWork.Id;

	if (_labRepository.CheckLabVariantExist(labId, Number) && (_labRepository.GetLabVariantIdByNumber(labId, Number) != variantId))
	{
		return Json(ResponseConstants.LabVariantNameCollisionSystemName);
	}
            
        labVar.Number = Number;
	labVar.IntroducingVariant = IntrVar;
	labVar.Version += 1;
        labVar.TaskVariants.Clear();
        labVar.TaskVariants = MakeTaskVariantsList(JsonConvert.DeserializeObject<long[]>(JsonArr));
//            Thread.Sleep(5000);
         labVar.TestPool = (testPoolId > 0) ? _testPoolRepository.GetTestPoolById(testPoolId) : null;

         try
	{
                _labRepository.ModifyLabVariant(labVar);
	}
	catch (Exception)
	{
		return Json(ResponseConstants.LabVariantModifyErrorSystemName);
	}

	return Json(ResponseConstants.LabVariantModifySuccessSystemName);
}`

Если на странице редактирования не указан тестовый набор, то контроллеру передается значение идентификатора tespPoolId = 0. Соответственно в последней строке приведенного листинга проверяется, что если идентификатор положителен, то свойству варианта labVar,Testpool присваивается объект из базы данных TestPool, получаемый из контекста по переданному идентификатору. В противном случае объекту выставляется null.
Однако на деле опытным путем в режиме отладки было обнаружено, что при присвоенном положительном идентификаторе, вариант получает необходимое свойство и корректно сохраняется в базу данных. Однако если получен нулевой идентификатор, то выполняется ветвь присвоения null, но соответствующему свойству варианта LabVar.TestPool значение не переприсваивается и остается прежним.
Далее было замечено, что если в режиме отладки поставить контрольную точку перед присвоением тестового набора и через несколько секунд продолжить выполнение программы, то присваивание происходило успешно, и в базе данных отображался NULL. Если же контрольная точка ставилась после присваивания, то значение на пустое не менялось.
Было сделано предположение, что программа выполняется в несколько потоков и в качестве временного решения предложена приостановка основного потока на несколько секунд. Однако данный способ решения не исправил ситуацию. Более того, теперь даже при остановке на контрольной точке перед присваиванием null не присваивается.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions