我有一对多的订单到支付的关系。
public class Order
{
[Key]
public Guid SerialNumber { get; set; }
public string OrderNumber { get; set; }
...
[ForeignKey("OrderNumber")]
public virtual ICollection<Payment> Payments { get; set; }
}
public class Payment
{
[Key]
public string SerialNumber { get; set; }
public string OrderNumber { get; set; }
...
public decimal Amount { get; set; }
}尽管有可用的记录,但付款收集始终显示0元素。我已经查看了跟踪,问题似乎与生成的SQL查询有关--它试图将Order.SerialNumber与Payment.OrderNumber匹配。
我如何解决这个问题,最好是使用数据注释?提前感谢!
发布于 2012-09-18 18:40:46
它正试图将Order.SerialNumber与Payment.OrderNumber相匹配。
是的,因为这正是你所做的模型。ForeignKey属性不描述相关表中外键属性的名称。它描述同一个表中外键属性的名称,并用于将导航属性与其键配对,因此正确的用法是:
public class Order
{
[Key]
public Guid SerialNumber { get; set; }
public string OrderNumber { get; set; }
...
public virtual ICollection<Payment> Payments { get; set; }
}
public class Payment
{
[Key]
public string SerialNumber { get; set; }
// Foreign key must have the same type as primary key in the principal table
public Guid OrderNumber { get; set; }
...
public decimal Amount { get; set; }
// Reverse navigation property to principal associated with foreign key
[ForeignKey("OrderNumber")]
public virtual Order Order { get; set; }
}如果您不希望在支付中使用导航属性,则必须使用fluent API来描述映射:
modelBuilder.Entity<Order>()
.HasMany(o => o.Payments)
.WithRequired()
.HasForeignKey(p => p.OrderNumber);如果您有现有的数据库,并且您的关系真的针对Order表中的Order列,这意味着必须用唯一约束标记它--这种关系目前无法在EF中映射,因为它还不支持唯一的约束。
https://stackoverflow.com/questions/12481530
复制相似问题