EF Migrations: Добавить дополнительную косвенность между существующими отношениями 1-к-n - PullRequest
0 голосов
/ 04 июля 2019

Представьте себе такой сценарий: человек владеет набором автомобилей. В настоящее время у меня есть:

Пользователь (1) - (N) Автомобили

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

Пользователь (1) - (N) Гаражи (1) - (N) Автомобили

Фактические данные могут быть отброшены, это нормально. Просто есть другие части этой базы данных, которые содержат данные, которые должны храниться. Эта часть полностью изолирована и может быть стерта. Пример составлен, потому что я не уверен, что могу сказать, но это действительно так просто.

Я понятия не имею о миграциях и с этим тяжело борюсь. Большое спасибо за любую помощь, я ценю это!

Редактировать: Что у меня есть:

public class OwnerEntity
{
  [Key]
  public Guid Id { get; set; }

  [Required]
  public string Name { get; set;}
  public List<CarEntity> OwnedCars { get; set; }
  // Rather would have:
  // public List<GarageEntity> OwnedGarages { get; set; }
}

public class CarEntity
{
  [Key]
  public Guid Id { get; set; }

  [Required]
  public OwnerEntity Owner { get; set; }
  public Guid OwnerId { get; set; }
  // Would not be directly owned anymore but would have a garage as an owner

  [Required]
  public string ModelDescr { get; set; }
}
// In the db context
public DbSet<OwnerEntity> Owners { get; set; }
public DbSet<CarEntity> Cars { get; set; }

protected override void OnModelCreating(ModelBuilder model)
{
  // This would simply duplicate. Once for Car <-> Garage and once for Garage <-> Owner entitities
  model.Entity<CarEntity>()
                .HasOne(x => x.Owner)
                .WithMany(x => x.OwnedCars)
                .HasForeignKey(x => x.OwnerId)
                .OnDelete(DeleteBehavior.Cascade);
}

Основная проблема, с которой я сталкиваюсь, когда пытаюсь что-то здесь изменить, заключается в следующем: база данных по-прежнему сохраняет старые таблицы и схему. Не опуская его, появляются монетные фрагменты (как и ожидалось). Есть также несколько сущностей, прикрепленных к Car (если использовать мой пример), которые я хочу сохранить (их схема). Я пытался закомментировать DBSets, чтобы EF сам отбрасывал таблицы, а затем вносил изменения и заставлял их выполнять фактическую миграцию, но на самом деле это не работает, слишком много работы и просто глупо ... Надеюсь, это поможет больше!

1 Ответ

0 голосов
/ 05 июля 2019

Я понял, что проблема заключалась в том, что в таблицах все еще были элементы, где я пытался изменить отношения внешнего ключа.Решение было очень простым: я создал пустую миграцию и просто удалил все содержимое этих таблиц вручную (из-за каскадного поведения удаления мне пришлось удалить только одну таблицу).

После этого я мог изменять любые столбцытак, как я хотел, потому что не осталось данных, чтобы вызвать конфликты.Довольно глупая проблема, но я не мог долго оборачивать ее.

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