Я пытаюсь заставить его работать
Я хотел бы иметь Dealer
, у которого есть два списка того же типа Items
, которые связаны, но я бы также хотел иметь возможность каскадного удаления их
public class Dealer
{
[Key]
public Guid Id { get; set; }
public string Name { get; set; }
public List<Car> OldCars { get; set; } = new List<Car>();
public List<Car> NewCars { get; set; } = new List<Car>();
}
public class Car
{
[Key]
public Guid Id { get; set; }
public string Model { get; set; }
public Dealer Dealer { get; set; }
}
Что я пытался:
Попытка # 1
modelBuilder.Entity<Car>()
.HasOne(s => s.Dealer)
.WithMany(s => s.OldCars)
.HasForeignKey(x => x.Dealer)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<Car>()
.HasOne(s => s.Dealer)
.WithMany(s => s.NewCars)
.HasForeignKey(x => x.Dealer)
.OnDelete(DeleteBehavior.Cascade);
System.InvalidOperationException: «Дилер» нельзя использовать в качестве свойства для типа сущности «Автомобиль», поскольку он настроен как навигация. '
Попытка № 2
Между тем с:
modelBuilder.Entity<Car>()
.HasOne(s => s.Dealer)
.WithMany(s => s.NewCars)
.HasPrincipalKey(x => x.Id) <--- Principal!
.OnDelete(DeleteBehavior.Cascade);
Работает нормально, но показывает предупреждение, что
предупреждение: Microsoft.EntityFrameworkCore.Model [10605]
Между 'Car' и 'Dealer' существует несколько взаимосвязей без настроенных свойств внешнего ключа, в результате чего EF создает теневые свойства для 'Car', имена которых зависят от порядка обнаружения.
К сожалению, при попытке выполнить удаление (каскад) выдается исключение:
SqlException: инструкция DELETE конфликтует с ограничением REFERENCE "FK_Cars_Dealers_DealerId1". Конфликт произошел в базе данных «testDB», таблице «dbo.Cars», столбце «DealerId1».
Заявление было прекращено.
Попытка № 3
Когда я добавляю идентификатор дилера в машину
public class Car
{
[Key]
public Guid Id { get; set; }
public string Model { get; set; }
public Dealer Dealer { get; set; }
public Guid DealerID { get; set; }
}
Он кричит о
System.Data.SqlClient.SqlException: 'Невозможно создать, удалить, включить или отключить более одного ограничения, столбца, индекса или триггера с именем' FK_Cars_Dealers_DealerId 'в этом контексте. Дубликаты имен не допускаются.
Имена столбцов в каждой таблице должны быть уникальными. Имя столбца 'DealerId' в таблице 'Автомобили' указывается более одного раза. '
# Попытка # 3.1
Итак, после переименования Guid DealerID
например, Guid DealerID123
кричит
SqlException: оператор INSERT конфликтует с ограничением FOREIGN KEY "FK_Cars_Dealers_DealerID123". Конфликт произошел в базе данных «testDB», таблице «dbo.Dealers», столбце «Id».
Заявление было прекращено.
У кого-нибудь есть идеи, как заставить это работать?