我有一个具有多对多关系的 SQL 数据库(它没有被规范化并且没有主键,只有我无法更改架构的索引)。
预订可以有很多客户,反之亦然。Reservation 表以 ReservationID 和 TransactionLineNumber 为键。Customer 表以 IPCode 作为其键。
有一个用于创建这种关系的查找表,它只有三个键,没有别的。
下面是我的 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;
在第二个 First() 调用中引发异常,因为 LinkedCustomers 没有项目。 查看我要连接的数据库,此客户列表中应该有一个条目。
关于我的配置可能不好的任何指示?