Я прочитал много связанных вопросов по этой теме, но ни один из них, похоже, не решил мою проблему, поэтому, пожалуйста, потерпите меня.Я новичок в EF и пытаюсь установить следующие отношения в ASP .NET MVC с использованием EF6:
Мне нужно иметь две постоянные таблицы, Drivers и Cars.Теперь мне нужно создать связь между этими таблицами, когда водитель связан с автомобилем. Но один водитель может быть назначен только одному автомобилю.
Водитель не всегда может быть связан с автомобилем, и наоборот, и я хочу сохранить обе таблицы, даже если их нетмежду ними всегда есть связь, поэтому я считаю, что мне нужна дополнительная таблица исключительно для этой связи.Я думаю, что это создаст отношения 1: 1: 1 между этими классами.
Ниже приведена модель для моих классов POCO.
Models
public class Driver
{
public int DriverID { get; set; }
public string Name { get; set; }
//other additional fields
public DriverCar DriverCar { get; set; }
}
public class Car
{
public int CarID { get; set; }
public string Brand { get; set; }
//other additional fields
public DriverCar DriverCar { get; set; }
}
public class DriverCar
{
public int DriverCarID { get; set; }
public int DriverID { get; set; }
public Driver Driver { get; set; }
public int CarID { get; set; }
public Car Car { get; set; }
}
Я попытался настроить отношения с помощью Fluent API, но я считаю, что я делаю это совершенно неправильно, так как у меня есть такие ошибки, как:
Введение ограничения FOREIGN KEY 'FK_dbo.DriverCar_dbo.Car_CarId' onТаблица «DriverCar» может вызывать циклы или несколько каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.Не удалось создать ограничение или индекс.См. Предыдущие ошибки.
Свободный API
modelBuilder.Entity<DriverCar>()
.HasRequired(a => a.Driver)
.WithOptional(s => s.DriverCar)
.WillCascadeOnDelete(false);
modelBuilder.Entity<DriverCar>()
.HasRequired(a => a.Car)
.WithOptional(s => s.DriverCar)
.WillCascadeOnDelete(false);
Я действительно не уверен, что я что-то упустил или есть какой-то лучший способ справиться с этимСитуация, и я был бы очень признателен, если кто-то может дать мне отзыв о том, как решить эту проблему.
Обновление
Только что нашел интересный ответ здесь: Возможно лизахватить отношения от 0..1 до 0..1 в Entity Framework? Что я считаю именно тем, что я хочу: отношение от 0.1 до 0..1.Но все перечисленные варианты кажутся слишком сложными, и я не совсем уверен, какой из них лучший или как их правильно реализовать.
Предполагается, что эти типы отношений так сложно реализовать в EF?Например, я попробовал вариант 1, но он создал отношение 0..1 ко многим из обеих таблиц - водитель с автомобилем и автомобиль с водителем.Как мне тогда создать между ними уникальную ассоциацию?