1

多対多の関係を持つ SQL データベース (正規化されておらず、主キーがなく、スキーマを変更できないインデックスのみ) があります。

予約には多数の顧客が含まれる場合があり、その逆も同様です。Reservation テーブルは、ReservationID と TransactionLineNumber を基にしています。Customer テーブルには、キーとして IPCode があります。

3 つのキーだけを持つこの関係を作成するために使用されるルックアップ テーブルがあります。

以下は私の DbContext 構成コードです。

        modelBuilder.Entity<ReservationDetail>()
            .HasMany(rd => rd.LinkedCustomers)
            .WithMany(c => c.Reservations)
            .Map(m =>
            {
                m.ToTable("r_transaction_detail_ip");
                m.MapLeftKey("reservation_id", "transaction_line_number");
                m.MapRightKey("ip_number");
            });

それぞれのクラスのスニペットと、それらのエンティティ構成を次に示します。

お客様

public class Customer
{
    public string IpNumber { get; set; }

    public string CustomerName { get; set; }

    public virtual ICollection<ReservationDetail> Reservations { get; set; }
}

        ToTable("ip");
        HasKey(c => c.IpNumber);

        Property(c => c.IpNumber).HasColumnName("ipcode");
        Property(c => c.CustomerName).HasColumnName("displayname");

予約

public class ReservationDetail
{
    public string ReservationId { get; set; }

    public short TransactionLineNumber { get; set; }

    ...

    public virtual ICollection<Customer> LinkedCustomers { get; set; } 
}

        ToTable("r_transaction_detail");
        HasKey(rd => new { rd.ReservationId, rd.TransactionLineNumber });

        Property(rd => rd.ReservationId).HasColumnName("reservation_id");
        Property(rd => rd.TransactionLineNumber).HasColumnName("transaction_line_number");

質問/問題について

実行時に、予約のリストと、予約に関連する各顧客を取得しようとしています。次のサンプル コードを実行します。

(this is an IQueryable of ReservationDetail) reservationItems.First().LinkedCustomers.First().CustomerName;

LinkedCustomers にはアイテムがないため、2 回目の First() 呼び出しで例外がスローされます。 接続先の DB を見ると、この Customers のリストに 1 つのエントリがあるはずです。

私の構成がどこに悪いのかについての指針はありますか?

4

0 に答える 0