gpt4 book ai didi

c# - Entity Framework 中的关系表问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:13 25 4
gpt4 key购买 nike

我有一个订单付款的一对多关系:

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; }
}

尽管有可用的记录,Payments 集合始终显示 0 个元素。我查看了跟踪,问题似乎出在生成的 SQL 查询上 - 它试图将 Order.SerialNumber 与 Payment.OrderNumber 匹配。

我该如何解决这个问题,最好是使用数据注释?提前致谢!

最佳答案

it's trying to match Order.SerialNumber to 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; }
}

如果您不想在 Payment 中使用导航属性,您必须使用流畅的 API 来描述映射:

modelBuilder.Entity<Order>()
.HasMany(o => o.Payments)
.WithRequired()
.HasForeignKey(p => p.OrderNumber);

如果您有现有的数据库,并且您的关系确实以 Order 表中的 OrderNumber 列为目标,则意味着它必须标记有唯一约束 - 这种关系目前无法映射到EF,因为它还不支持唯一约束。

关于c# - Entity Framework 中的关系表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com