为什么将导航属性设置为 null 将外键属性也设置为 null?

问题描述 投票:0回答:1

我使用 EFCore 7.0.3。 这是我的实体:

[Table("Common_T230")]
public class Employment {
    [Column("F230_ID")]
    public int Id { get; set; }

    [Column("F230_14")]
    public string VehicleNumber { get; set; }
    public virtual Vehicle Vehicle { get; set; }
}

这里是关系的定义:

modelBuilder.Entity<Employment>()
            .HasOne(e => e.Vehicle)
            .WithMany()
            .HasPrincipalKey(e => e.VehicleNumber)
            .HasForeignKey(e => e.VehicleNumber);

现在,当我加载就业信息并设置 VehicleNumber(ForeignKey-Value)并将导航属性设置为 null 时,ctx.SaveChanges() 会将 null 设置为 F230_14(VehicleNumber)。有人可以解释一下,为什么会发生这种情况? VehicleNumber 包含有效的外键值。

var employment = query.Include(x => x.Vehicle).FirstOrDefault(x => x.Date == currentDate && x.ProjectNumber == projectNumber);
employment.PersonelNumber = personelNumber;
employment.Vehicle = null;
employment.VehicleNumber = vehicleNumber??"";


// here, EFCore will save null to F230_14 (VehicleNumber)
ctx.SaveChanges();
c# entity-framework-core navigation-properties ef-core-7.0
1个回答
0
投票

当您将导航属性设置为 NULL 时,您是在说“该对象没有关联的车辆”,因此没有外键值。可能存在这样的情况(例如延迟加载):您从外键值开始但没有对象(我有一段时间没有使用 EF),但如果您显式地将对象设置为 NULL,我希望它设置 FK 值也为 NULL。

© www.soinside.com 2019 - 2024. All rights reserved.