首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架中关系表的问题

问实体框架中关系表的问题
EN

Stack Overflow用户
提问于 2012-09-18 16:51:59
回答 1查看 232关注 0票数 2

我有一对多的订单到支付的关系。

代码语言:javascript
复制
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匹配。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-18 18:40:46

它正试图将Order.SerialNumber与Payment.OrderNumber相匹配。

是的,因为这正是你所做的模型。ForeignKey属性不描述相关表中外键属性的名称。它描述同一个表中外键属性的名称,并用于将导航属性与其键配对,因此正确的用法是:

代码语言:javascript
复制
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来描述映射:

代码语言:javascript
复制
modelBuilder.Entity<Order>()
            .HasMany(o => o.Payments)
            .WithRequired()
            .HasForeignKey(p => p.OrderNumber);

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12481530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档