我有一个包含复合主键的表:{OrderNumber,OrderLine,OrderItem},在{OrderNumber,OrderLine}上有一个外键。如何在实体框架中首先使用代码实现此目的?
我的尝试:
public class OrderDetails
{
[Key, ForeignKey("Order"), Column(Order = 0)]
public int OrderNumber { get; set; }
[Key, ForeignKey("Order"), Column(Order = 1)]
public int OrderLine { get; set; }
[Key, Column(Order = 2)]
public int OrderItem { get; set; }
// ... Other properties
}
答案 0 :(得分:1)
使用流畅的映射和导航属性很容易(实际上我更喜欢流畅的映射,因为它允许保持实体清晰而不用数据提供者特定属性“污染”它们)。假设您的订单类看起来像
public class Order
{
public int Number { get; set; }
public int Line { get; set; }
// ...
public virtual ICollection<OrderDetails> Details { get; set; }
}
然后映射会看起来像这样
modelBuilder.Entity<Order>()
.HasKey(o => new { o.Number, o.Line });
modelBuilder.Entity<OrderDetails>()
.HasKey(od => new { od.OrderNumber, od.OrderLine, od.OrderItem });
modelBuilder.Entity<OrderDetails>()
.HasRequired(od => od.Order)
.WithMany(o => o.Details)
.HasForeignKey(od => new { od.OrderNumber, od.OrderLine });