Отношения от _ до _ не поддерживаются, потому что принадлежащий тип сущности _ не может быть на главной стороне отношения не-собственности - PullRequest
1 голос
/ 28 марта 2019

У меня проблемы с отображением ядра платформы сущностей. Я получаю это исключение: «Отношение« Платеж »к« Покупке. Платежи »не поддерживается, поскольку принадлежащий объект типа« Покупка »не может быть основной стороной отношений, не связанных с владением». во время отладки теста для этой функции.

Можете ли вы, ребята, помочь мне с этим? :)

Я попытался внести несколько изменений в эти сопоставления, но он продолжает терпеть неудачу.

public class Car : Entity
{
    public Purchase Purchase { get; private set; }
}

public class Purchase {
    public List<Payment> Payments { get; private set; }
}

public class Payment : PaymentBase  {
}

public abstract class PaymentBase : Entity {
    public long CarId { get; protected set; }
    public Car Car { get; protected set; }
    public Purchase Purchase { get; private set; }
}

public class MyContext : DbContext {

    public MyContext(DbContextOptions<MyContext> options) : base(options)
    {
    }

    public DbSet<Car> Cars { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new CarConfig());
        modelBuilder.ApplyConfiguration(new PurchaseConfig());
        modelBuilder.ApplyConfiguration(new PaymentConfig());
        base.OnModelCreating(modelBuilder);
    }
}

public class CarConfig : IEntityTypeConfiguration<Car>
{
    public void Configure(EntityTypeBuilder<Car> builder)
    {
        builder.OwnsOne(x => x.Purchase).HasForeignKey("ShadowId");

        builder.ToTable("CAR_DEALS");

        builder.HasKey(x => x.Id);
        builder.Property(x => x.Id).IsRequired().HasColumnName("CAR_ID");
    }
}

public class PurchaseConfig : IEntityTypeConfiguration<Purchase>
{
    public void Configure(EntityTypeBuilder<Purchase> builder)
    {
        builder.ToTable("CAR_DEALS");
        builder.HasMany(x => x.Payments).WithOne();
    }
}

public class PaymentConfig : IEntityTypeConfiguration<Payment>
{
    public void Configure(EntityTypeBuilder<Payment> builder)
    {
        builder.ToTable("PAYMENTS");

        builder.HasKey(x => x.Id);
        builder.Property(x => x.Id).IsRequired().HasColumnName("PAYMENT_ID");

        builder.HasOne(x => x.Purchase).WithMany(x => x.Payment);
        builder.Ignore(x => x.Purchase);
        builder.Property(x => x.CarId).HasColumnName("CAR_ID");
    }
}

1 Ответ

0 голосов
/ 17 мая 2019

Заменить builder.OwnsOne (x => x.Purchase) .HasForeignKey ("ShadowId"); с builder.HasOne (x => x.Purchase) .HasForeignKey ("ShadowId");

´EF Core позволяет моделировать типы объектов, которые могут появляться только в свойствах навигации других типов объектов. Это так называемые типы объектов. Сущность, содержащая принадлежащий ей тип сущности, является ее владельцем. '

https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities

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