postgresql Отображение ошибки «многие ко многим» - PullRequest
0 голосов
/ 30 января 2020

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

System.Reflection.TargetInvocationException: Исключение было выдано целью вызова. ---> System. Свойства навигации могут участвовать только в одном отношении.

У меня есть 3 таблицы, Manifest, ManifestToBroker, Brokers.

public class Manifest
{
    public virtual ManifestToBroker ManifestToBroker { get; set; }
    .......other stuff
}

public class ManifestToBroker
{
    public virtual Manifest Manifest { get; set; }

    public int ManifestId { get; set; }

    public int? ABIFilerId { get; set; }

    public int? ACASFilerId { get; set; }

    public int? AMSFilerId { get; set; }

    public virtual Brokers ABIBroker { get; set; }

    public virtual Brokers ACASBroker { get; set; }

    public virtual Brokers AMSBroker { get; set; }
}

public class Brokers
{
    [StringLength(32)]
    [Required(AllowEmptyStrings = false)]
    public string Name { get; set; }

    [StringLength(50)]
    public string Description { get; set; }

    [StringLength(100)]
    public string Contacts { get; set; }

    [Required]
    public int BrokerType { get; set; }

    [Required]
    public bool SupportABI { get; set; }

    [Required]
    public bool SupportACAS { get; set; }

    [Required]
    public bool SupportAMS { get; set; }

    public virtual ICollection<ManifestToBroker> ManifestToBrokers { get; set; } = new List<ManifestToBroker>();
}

Я поместил все отображения в ManifestToBrokerMapper для простоты.

public class ManifestToBrokerMapping : IntKeyBaseBaseEntityConfiguration<ManifestToBroker>
{
    protected override void ConfigureThis(EntityTypeBuilder<ManifestToBroker> builder)
    {
        builder.HasKey(m => m.Id);
        builder.HasOne(m => m.ABIBroker)
            .WithMany(m => m.ManifestToBrokers)
            .HasForeignKey(m => m.ABIFilerId);
        builder.HasOne(m => m.ACASBroker)
            .WithMany(m => m.ManifestToBrokers)
            .HasForeignKey(m => m.ACASFilerId);
        builder.HasOne(m => m.AMSBroker)
            .WithMany(m => m.ManifestToBrokers)
            .HasForeignKey(m => m.AMSFilerId);
        builder.HasOne(m => m.Manifest)
            .WithOne(m => m.ManifestToBroker)
            .IsRequired();
        builder.HasIndex(m => new { m.ManifestId, m.ABIFilerId }).IsUnique();
        builder.HasIndex(m => new { m.ManifestId, m.ACASFilerId }).IsUnique();
        builder.HasIndex(m => new { m.ManifestId, m.AMSFilerId }).IsUnique();
    }
}

1 Ответ

0 голосов
/ 03 февраля 2020

Найдена проблема, в таблице Брокеров также должен присутствовать каждый из ManifestToBroker

public virtual ICollection<ManifestToBroker> ABIFilerMTB { get; set; } = new List<ManifestToBroker>();

public virtual ICollection<ManifestToBroker> ACASFilerMTB { get; set; } = new List<ManifestToBroker>();

public virtual ICollection<ManifestToBroker> AMSFilerMTB { get; set; } = new List<ManifestToBroker>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...