我有一个Child模型,该模型具有一个称为EmergencyContactId的属性。此属性是可为空的GUID,它在设置时指向我的Contacts表(是的,该列在数据库中设置为可为空)。问题是,当我调用_context.Children.Add(newChild)时,EF会自动将newChildEmergencyContactId属性生成为新的GUID,即使它应该为null。

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只留下物业;如果为null,那就应该是这样!

看来这应该没有那么难,但我们来了。我完全不知所措。

编辑:我的模型

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);

最佳答案

这个EmergencyContactId不是关系ID吗?如果是这样,可能是您已将对象(可能称为)EmergencyContact设置为对象。在这种情况下,EmergencyContactId也将自动用EmergencyContact的ID填充。

10-07 22:33