Ошибка EF Core «Не удалось определить зависимую сторону для связи один к одному»C#

Место общения программистов C#
Ответить
Anonymous
 Ошибка EF Core «Не удалось определить зависимую сторону для связи один к одному»

Сообщение Anonymous »

Я использую новейшую версию .NET 9.0
При попытке создать миграцию я получаю следующую ошибку:

Невозможно создать «DbContext» типа «AppDbContext». Исключение «Не удалось определить зависимую сторону для однозначного отношения между «Truck.Driver» и «Driver.Truck». Чтобы определить зависимую сторону связи, настройте свойство внешнего ключа. Если эти переходы не должны быть частью одного и того же отношения, настройте их независимо с помощью отдельных цепочек методов в «OnModelCreating». Дополнительную информацию см. на https://go.microsoft.com/fwlink/?LinkId=724062». был выброшен при попытке создать экземпляр. Информацию о различных шаблонах, поддерживаемых во время разработки, см. на странице https://go.microsoft.com/fwlink/?linkid=851728

Это следующие классы. :

Код: Выделить всё

public class DriverEntity : Entity
{
public string FirstName { get; set; } = string.Empty;
public string? MiddleName { get; set; }
public string LastName { get; set; } = string.Empty;
public TruckEntity? CurrentTruck { get; set; }
}
И:

Код: Выделить всё

public class TruckEntity : Entity
{
public string Registration { get; set; } = string.Empty;
public int? TrailerId { get; set; }
public TrailerEntity? Trailer { get; set; }
public int? DriverId { get; set; }
public DriverEntity? CurrentDriver { get; set; }
public List Trips { get; set; } = [];
Это необязательная связь «один к одному», поэтому родительский класс Truck имеет свойства DriverId и Driver, допускающие значение NULL, а дочерний класс Driver имеет свойство навигации Truck, допускающее значение NULL. >
Они являются производными от класса Entity:

Код: Выделить всё

public abstract class Entity
{
public int Id { get; set; }
public bool IsDeleted { get; set; }
public DateTime CreatedDate { get; set; } = DateTime.UtcNow;
public DateTime? ModifiedDate { get; set; }
public string? ModifiedBy { get; set; }
}
Классы конфигурации приведены ниже.

Код: Выделить всё

public class DriverConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.HasKey(d => d.Id);

builder.Property(d => d.FirstName)
.IsRequired()
.HasMaxLength(50);

builder.Property(d => d.LastName)
.IsRequired()
.HasMaxLength(50);
}
}

Код: Выделить всё

public class TruckConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.HasKey(t => t.Id);

builder.HasOne(t => t.Trailer)
.WithOne(t => t.Truck)
.HasForeignKey(tr => tr.TrailerId)
.IsRequired(false);

builder.HasOne(t => t.CurrentDriver)
.WithOne(t => t.CurrentTruck)
.HasForeignKey(t => t.DriverId)
.OnDelete(DeleteBehavior.Restrict)
.IsRequired(false);

builder.HasMany(t => t.Trips)
.WithOne()
.HasForeignKey(t => t.TruckId)
.OnDelete(DeleteBehavior.Restrict);

builder.Property(t => t.Registration)
.IsRequired()
.HasMaxLength(15);
}
}
Отношения настроены, как рекомендовано в документации MS.
Почему эта ошибка может повторяться, даже если она настроена правильно?
Кроме того, аналогичная связь возникает с грузовиком и прицепом, но я думаю, что EF Core сначала обнаруживает проблему с соотношением водитель-грузовик.

Подробнее здесь: https://stackoverflow.com/questions/793 ... to-one-rel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»