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

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

Open
AnnMalofeeva opened this issue Aug 29, 2017 · 0 comments
Assignees

Comments

@AnnMalofeeva
Copy link
Contributor

AnnMalofeeva commented Aug 29, 2017

В рамках тестирования функционала при проверке работы серверной части 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 не присваивается.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants