流畅的地图(复合)主键

时间:2015-08-26 02:04:18

标签: c# entity-framework fluent

我正在尝试使用流畅的语法来映射包含父表中的ID的主键以及此表中的ID。举例说明:

Order                               OrderLine
-------------                       -------------
OrderID                             OrderID
OrderDate                           OrderLineID
Total                               Product
etc                                 Quantity
(OrderID is the primary key)        etc
                                    (OrderID, OrderLineID is the primary key)

OrderLine类具有Order属性(因此没有OrderID属性)。

public class Order                              public class OrderLine
{                                               {
  public int OrderID { get; set; }                public int OrderLineID { get; set; }
  public DateTime OrderDate { get; set; }         public Product Product { get; set; }
  public double Total { get; set; }               public int Quantity { get; set; }
}                                                 
                                                  public virtual Order Order { get; set; }
                                                }

我如何识别OrderLine在其主键中包含订单的ID?

我试过了:

modelBuilder.Entity<OrderLine>().HasKey(ol => new { ol.Order.OrderID, ol.OrderLineID });

但是我收到以下错误:

The properties expression 'ol => new <>f__AnonymousType0`2(OrderID = ol.Order.OrderID, OrderLineID = ol.OrderLineID)' is not valid.
The expression should represent a property:
    C#: 't => t.MyProperty'  VB.Net: 'Function(t) t.MyProperty'. 
When specifying multiple properties use an anonymous type: 
    C#: 't => new { t.MyProperty1, t.MyProperty2 }'  VB.Net: 'Function(t) New With { t.MyProperty1, t.MyProperty2 }'.

据我从错误消息中可以看出,我使用了正确的语法,但它似乎表明我需要父Order的ID属性作为OrderLine类中的属性 - 这似乎否定了这一点首先在课堂上有一个Order属性。

那么,我是否需要OrderLine类中的显式OrderID属性(即使我已经有一个Order属性),或者我是否在映射中没有正确识别主键?

0 个答案:

没有答案