Я работаю над приложением конфигуратора ПК, и у меня есть проблема с проверкой. Точка приложения, чтобы проверить, если сокет на материнской плате так же, как гнездо процессора и т.д.контекст проверки рамки сущности - null исключение в нулевом тесте
Я сделал код первой базы данных с использованием строительных лесов в Visual Studio 2013.
public class Configuration : IValidatableObject
{
[Key]
public int ConfigurationID { get; set; }
[Required]
[StringLength(50, MinimumLength = 3)]
[DisplayName("Configuration name")]
public string ConfigName { get; set; }
[ForeignKey("mb_id")]
public MotherBoard MotherBoard { get; set; }
[Column("mb_id", TypeName = "int")]
public Nullable<int> mb_id { get; set; }
[ForeignKey("cpu_id")]
public CPU CPU { get; set; }
[Column("cpu_id", TypeName = "int")]
public Nullable<int> cpu_id { get; set; }
}
Это является частью модели конфигурации, что я (остальная часть выглядит довольно похожей - только другие компоненты)
Я просто подстегнул эту модель в контроллер.
Это начало проверки, и, похоже, проблема здесь где-то (по крайней мере, говорит VS).
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (MotherBoard == null) { throw new ArgumentNullException("Motherboard"); }
if (CPU == null) { throw new ArgumentNullException("CPU"); }
if (GPU == null) { throw new ArgumentNullException("GPU"); }
if (HDD == null) { throw new ArgumentNullException("HDD"); }
if (RAM == null) { throw new ArgumentNullException("RAM"); }
if (Power == null) { throw new ArgumentNullException("Power"); }
if (Case == null) { throw new ArgumentNullException("Case"); }
if (MotherBoard.CPU.ToUpper().Trim() != CPU.Socket.ToUpper().Trim())
{
yield return new ValidationResult("CPU socket does not match.", new[] { "cpu_id" });
}
}
Когда я создаю конфигурацию ПК без проверки, он обычно идет в базу данных. Но когда я пытаюсь выполнить эту проверку, он говорит, что CPU (в null-тесте) имеет значение NULL и выбрасывает null-исключение. Screenshot from VS.
Он никогда не бросает его на материнскую плату, но всегда на следующий элемент (на второй предмет).
Вы проверили опубликованное значение в CPU? Это действительно нулевое значение, или оно исключает исключение, не будучи нулевым. –
На самом деле действует тихо.Когда я добавляю подтверждение в комментарий, он обычно складывает конфигурацию и помещает ее в БД. Но когда я раскомментирую это, он говорит, что и материнская плата имеет значение null, но исключает исключение из теста CPU. – healadin
Я имею в виду, когда я запускаю это без проверки, он создает конфигурацию с процессором и все без проблем. – healadin