Хранение отношений один-к-одному в EF Core - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь сохранить в базе данных две сущности, которые относятся друг к другу, но одна из сущностей никогда не сохраняет идентификатор другой.

У меня есть класс Location:

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:

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

Когда это сохраняется в базе данных, столбец OpeningTimeId в таблице Locations заполняется, а столбец LocationId в таблице OpeningTimes - нет.

Теперь в этом конкретном примере мне не нужно обязательно заполнять столбец LocationId, но мне нужно сделать это для других объектов, и я не уверен, почему это не работает.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Нет необходимости указывать ссылки в обеих таблицах, удалить из одной таблицы. Для однозначного сопоставления вы можете добавить уникальное ограничение в столбец внешнего ключа referrerd в таблице.

0 голосов
/ 24 июня 2018

Вы в классе Location не определили идентификатор поля типа Int и идентификатор и первичный ключ, которые автоматически добавляют одну единицу, как только запись добавляется в таблицу. Но вы можете сделать это в базе данных в таблице как мастер, но вам нужно снова добавить его в класс, но если вы хотите добавить атрибут в сам класс, компилятор сделает это за кулисами.

как:

  [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; }
...