在 EF Core 中存储一对一关系

Storing One-To-One relationships in EF Core

我正在尝试将两个相互关联的实体保存到数据库中,但其中一个实体从不保存另一个实体的 ID。

我有一个位置 class:

public string Name { get; set; }
public string Description { get; set; }
public string Latitude { get; set; }
public string Longitude { get; set; }
public Company Company { get; set; }

[ForeignKey("OpeningTimeId")]
public OpeningTime OpeningTimes { get; set; }

我有一个 OpeningTimes class:

public string Monday { get; set; }
public string Tuesday { get; set; }
public string Wednesday { get; set; }
public string Thursday { get; set; }
public string Friday { get; set; }
public string Saturday { get; set; }
public string Sunday { get; set; }

[ForeignKey("LocationId")]
public Location Location { get; set; }

然后我试图将这些保存到数据库中:

Location location = new Location()
{
    Name = LocationDto.Name,
    Description = LocationDto.Description,
    Latitude = LocationDto.Latitude,
    Longitude = LocationDto.Longitude,
    Company = LocationDto.Company,
    OpeningTimes = new OpeningTime() {
        Monday = LocationDto.OpeningTimes.Monday,
        Tuesday = LocationDto.OpeningTimes.Tuesday,
        Wednesday = LocationDto.OpeningTimes.Wednesday,
        Thursday = LocationDto.OpeningTimes.Thursday,
        Friday = LocationDto.OpeningTimes.Friday,
        Saturday = LocationDto.OpeningTimes.Saturday,
        Sunday = LocationDto.OpeningTimes.Sunday,
    }
};

_context.Locations.Add(location);
_context.SaveChanges();

将其保存到数据库后,会填充 Locations table 中的 OpeningTimeId 列,但不会填充 OpeningTimes table 中的 LocationId 列。

现在,在这个具体示例中,我不一定需要填充 LocationId 列,但我确实需要为其他实体执行此操作,但我不确定为什么这不起作用。

您在 class 位置没有定义类型为 Int 和标识符的字段 ID 和主键,一旦记录被添加到 table 就会自动添加一个单元。 但是你可以在table里的数据库里做向导,但是你需要在class房间里再添加一次,但是如果你想在class里添加属性本身,编译器将在幕后执行此操作。

喜欢:

  [Key]
  public int LocationId {get;set;}
  public string Name { get; set; }
  public string Description { get; set; }
  public string Latitude { get; set; }
  public string Longitude { get; set; }
  public Company Company { get; set; }

  [ForeignKey("OpeningTimeId")]
  public OpeningTime OpeningTimes { get; set; }

不需要在两个 table 中都有引用,从一个 table 中删除。对于一对一映射,您可以将唯一约束添加到 table.

中的引用外键列