Оставьте GUID пустым при добавлении объекта в контекст - PullRequest
0 голосов
/ 30 мая 2018

У меня есть модель Child, свойство которой называется EmergencyContactId.Это свойство является пустым GUID, который указывает на мою таблицу Contacts, когда она установлена ​​(и да, для столбца установлено значение nullable в базе данных).Проблема в том, что когда я вызываю _context.Children.Add(newChild), newChild свойство *1005* автоматически генерируется EF как новый GUID, даже если оно должно быть нулевым.

var id = newChild.EmergencyContactId;    // id is null.
_context.Children.Add(newChild);
id = newChild.EmergencyContactId;        // id is a new GUID.

Итак, я попытался войти в свой OnModelCreating контекст моей базы данных и сделать следующее:

child.Property(props => props.EmergencyContactId)
    .HasDefaultValue(null)
    .ValueGeneratedNever();

Я подумал, что это должно решить проблему, но не такая удача;значение по-прежнему генерируется автоматически.Я хочу, чтобы EF просто оставил собственность в покое;если он нулевой, то он должен быть таким!

Не кажется, что это должно быть так сложно, но мы здесь.Я в полной растерянности, что делать дальше.

РЕДАКТИРОВАТЬ: Моя модель

public class Child 
{
    // other properties


    #region EmergencyContact

    private Contact _emergencyContact = default(Contact);
    public virtual Contact EmergencyContact { get => _emergencyContact; set => _emergencyContact = value; }

    #endregion EmergencyContact


    #region EmergencyContactId

    private Guid? _emergencyContactId;
    public Guid? EmergencyContactId { get => _emergencyContactId; set => _emergencyContactId = value; }

    #endregion EmergencyContactId

    // other properties
}

и ее конфигурация:

child.HasOne(props => props.EmergencyContact)
    .WithMany()
    .HasForeignKey(props => props.EmergencyContactId)
    .HasPrincipalKey(contact => contact.Id);

1 Ответ

0 голосов
/ 30 мая 2018

Это EmergencyContactId не идентификатор отношения?Если это так, возможно, вы установили объект (вероятно, называется) EmergencyContact для объекта.В этом случае EmergencyContactId также будет автоматически заполнен идентификатором EmergencyContact.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...