Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6 Fluent映射联接的错误键_C#_.net_Entity Framework_Orm_Ef Fluent Api - Fatal编程技术网

C# EF6 Fluent映射联接的错误键

C# EF6 Fluent映射联接的错误键,c#,.net,entity-framework,orm,ef-fluent-api,C#,.net,Entity Framework,Orm,Ef Fluent Api,我正在尝试让EF6 Fluent映射为我当前的项目工作。我有以下顺序映射: public class OrderMap : EntityTypeConfiguration<Order> { public OrderMap() { this.ToTable("OE_Orders"); this.Property(o => o.BillToAddress.Address1).HasColumnName("BillToAddress1"

我正在尝试让EF6 Fluent映射为我当前的项目工作。我有以下顺序映射:

public class OrderMap : EntityTypeConfiguration<Order>
{
    public OrderMap()
    {
        this.ToTable("OE_Orders");
        this.Property(o => o.BillToAddress.Address1).HasColumnName("BillToAddress1");
        this.Property(o => o.BillToAddress.Address2).HasColumnName("BillToAddress2");
        this.Property(o => o.BillToAddress.City).HasColumnName("BillToCity");
        this.Property(o => o.BillToAddress.State).HasColumnName("BillToState");
        this.Property(o => o.BillToAddress.Zip).HasColumnName("BillToZip");
        this.Property(o => o.ShipToAddress.Address1).HasColumnName("ShipToAddress1");
        this.Property(o => o.ShipToAddress.Address2).HasColumnName("ShipToAddress2");
        this.Property(o => o.ShipToAddress.City).HasColumnName("ShipToCity");
        this.Property(o => o.ShipToAddress.State).HasColumnName("ShipToState");
        this.Property(o => o.ShipToAddress.Zip).HasColumnName("ShipToZip");
        this.Property(o => o.Stop).HasColumnName("RouteStopNumber");

        this.HasKey(o => o.OrderNumber).HasMany(o => o.OrderLines).WithRequired(ol => ol.Order).HasForeignKey(ol => ol.OrderNumber);
        this.HasKey(o => o.CustomerKey).HasRequired(o => o.Customer).WithRequiredDependent();
    }
}
这就是问题所在:

LEFT OUTER JOIN [dbo].[OE_OrderLines] AS [Extent3] ON [Extent1].[CustomerKey] = [Extent3].[OrderNumber]
我不知道怎么修。我可以使用一些建议或资源来帮助我找出它映射错误的原因

让我知道如何更新此信息以使其更具信息性


谢谢大家抽出时间

问题在于配置中的这两行:

 this.HasKey(o => o.OrderNumber).HasMany(o => o.OrderLines).WithRequired(ol => ol.Order).HasForeignKey(ol => ol.OrderNumber);
 this.HasKey(o => o.CustomerKey).HasRequired(o => o.Customer).WithRequiredDependent();
在EF Fluent API术语中,
HasKey
表示映射主键,您已经指定了两次。由于后者优先(覆盖以前的设置),因此EF将
CustomerKey
列映射为
Order
表的主键

正确的配置应该是这样的(我建议您不要混合属性、PK和关联映射):


配置中的这两行中存在问题:

 this.HasKey(o => o.OrderNumber).HasMany(o => o.OrderLines).WithRequired(ol => ol.Order).HasForeignKey(ol => ol.OrderNumber);
 this.HasKey(o => o.CustomerKey).HasRequired(o => o.Customer).WithRequiredDependent();
在EF Fluent API术语中,
HasKey
表示映射主键,您已经指定了两次。由于后者优先(覆盖以前的设置),因此EF将
CustomerKey
列映射为
Order
表的主键

正确的配置应该是这样的(我建议您不要混合属性、PK和关联映射):


订单
->
客户
关系真的是
一对一
?奇怪的是,通常一个
客户
有很多
订单
s,不是吗?@IvanStoev是的,客户有很多订单,但我没有将客户与订单集合进行映射。那太过分了。我可以添加它,但它不是这个应用程序所必需的。它不一定要有一个集合。但是
Has
/
With
必须匹配关系基数。让我换一种方式问你-是
Order.CustomerKey
a FK to
Customer
表吗?@IvanStoev我明白你的意思了。是的,它是客户表的外键。
订单
->
客户
关系真的是
一对一
?奇怪的是,通常一个
客户
有很多
订单
s,不是吗?@IvanStoev是的,客户有很多订单,但我没有将客户与订单集合进行映射。那太过分了。我可以添加它,但它不是这个应用程序所必需的。它不一定要有一个集合。但是
Has
/
With
必须匹配关系基数。让我换一种方式问你-是
Order.CustomerKey
a FK to
Customer
表吗?@IvanStoev我明白你的意思了。是的,它是客户表的外键。
 this.HasKey(o => o.OrderNumber);

 this.HasMany(o => o.OrderLines)
     .WithRequired(ol => ol.Order)
     .HasForeignKey(ol => ol.OrderNumber);

 this.HasRequired(o => o.Customer)
     .WithMany()
     .HasForeignKey(o => o.CustomerKey);