C# EF6 Fluent映射联接的错误键
我正在尝试让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"
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 toCustomer
表吗?@IvanStoev我明白你的意思了。是的,它是客户表的外键。订单
->客户
关系真的是一对一
?奇怪的是,通常一个客户
有很多订单
s,不是吗?@IvanStoev是的,客户有很多订单,但我没有将客户与订单集合进行映射。那太过分了。我可以添加它,但它不是这个应用程序所必需的。它不一定要有一个集合。但是Has
/With
必须匹配关系基数。让我换一种方式问你-是Order.CustomerKey
a FK toCustomer
表吗?@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);