表示与Entity Framework中的查找表的多对多关系

时间:2014-06-18 19:50:52

标签: c# .net entity-framework many-to-many fluent-entity-framework

我有一个SQL数据库(没有规范化,没有主键,只有索引,我无法更改的模式),它具有多对多的关系。< / p>

预订可以有很多客户,反之亦然。 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没有项目。 查看我要连接的数据库,此客户列表中应该有一个条目。

关于我的配置可能不好的任何指示?

0 个答案:

没有答案