C# 在实体框架中用查找表表示多对多关系

C# 在实体框架中用查找表表示多对多关系,c#,.net,entity-framework,many-to-many,fluent-entity-framework,C#,.net,Entity Framework,Many To Many,Fluent Entity Framework,我有一个SQL数据库(它没有规范化,没有主键,只有索引,我无法更改其架构),具有多对多关系 预订可以有很多客户,反之亦然。Reservation表已键入ReservationID和TransactionLineNumber。Customer表的键是IPCode 有一个用于创建此关系的查找表,该关系包含三个键,没有其他键 下面是我的DbContext配置代码: modelBuilder.Entity<ReservationDetail>() .H

我有一个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");
            });
在第二个First()调用上引发异常,因为LinkedCustomers没有项查看我连接的数据库,此客户列表中应该有一个条目。


有没有关于我的配置可能不好的指针

@GertArnold这是一份预定名单。将更新问题。生成的SQL语句是否返回您期望的记录?@GertArnold获取生成的SQL的最简单方法是什么?EF 6?contex.Database.Log。Else Sql profiler(假设这是Sql Server)。@GertArnold我正在运行EF6,但当我将其设置为写入
控制台.write
时,我在输出窗口中没有看到预期的任何内容。2012/13是否不再记录控制台写入输出?
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;