Почему мои ссылочные свойства внешнего ключа не отражают значения свойства идентификатора внешнего ключа? - PullRequest
2 голосов
/ 20 марта 2012

У меня есть Candidate сущность, с некоторыми примерами ассоциаций ниже.У меня есть модель представления, которая не имеет ссылочных свойств, только свойства внешнего ключа, и я использую AutoMapper для сопоставления модели представления с сущностью.Когда я пытаюсь сохранить сущность, я получаю ошибки проверки, которые говорят мне, например, Поле заголовка обязательно для заполнения. , потому что, хотя мое TitleId имеет допустимое значение, Title по-прежнему равно нулю.

public class Candidate
{
...
    [Required]
    public string RefNum { get; set; }

    [ForeignKey("TitleId")]
    [Required]
    public Title Title { get; set; }
    public Guid TitleId { get; set; }
...
}

PS, я вижу, как здесь возникает проблема с атрибутом Required, но как еще я могу настаивать на том, что TitleId должен быть действительным идентификатором, а не просто пустым Guid?

1 Ответ

3 голосов
/ 20 марта 2012

Удалить атрибут [Required]. В любом случае это не гарантирует, что ваш Guid не пуст, потому что пустой Guid {00000000-0000-0000-0000-000000000000} является действительным Guid, который является допустимым значением столбца uniqueidentifier в базе данных. (Guid - это struct, который не может быть null.) Вы несете ответственность за установку правильного значения Guid. Поскольку Guid не имеет значения NULL, EF все равно обнаружит требуемое соотношение.

В качестве альтернативы вы также можете отключить проверку для экземпляра контекста ...

context.Configuration.ValidateOnSaveEnabled = false;

... чтобы избежать ошибки. Вы также можете настроить отображение в Fluent API (HasRequired/WithRequired) вместо использования аннотации данных, чтобы избежать ошибки проверки.

...