多対多の関係を持つ 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 つのエントリがあるはずです。
私の構成がどこに悪いのかについての指針はありますか?