在实体框架中定义外键

本文关键字:定义 实体 框架 | 更新日期: 2023-09-27 18:01:58

我得到一个间歇性错误

保存未为其关系公开外键属性的实体时出错

我相信这可能是因为我没有在实体框架数据库层中正确定义我的关系。

我定义了一个1:1关系的表,如下所示:

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public FinalisedServices Service { get; set; }

其中SpproFinalizedServices是外键。我应该这样写吗:

     public int FinalisedSerivce_Id { get; set; }
    [ForeignKey("FinalisedSerivce_Id")]
    public FinalisedServices Service { get; set; }

或者添加虚拟就足够了:

    public virtual FinalisedServices Service { get; set; }

我最初假设实体框架会在后台处理数据库外键。

在实体框架中定义外键

public virtual ICollection<FinalisedQuoteStaff> JobManagers { get; set; }
public virtual ICollection<FinalisedQuoteStaff> AllocatedStaff { get; set; }

这并不能定义一对一的关系。任何时候包含集合,都是在定义一对多或多对多。根据您的其他代码,我假设您将选择一对多。即一项服务有多名管理人员和工作人员。请查看本教程。您不需要在Finalized Service上显式定义外键。这适用于存在多个外键和/或与外键表命名不同的外键的情况。

您也不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)]——这是约定而非配置——默认情况下会这样做。如果您将Id字段命名为某种奇怪的名称,则需要该字段。当您将其命名为"Id"时,它是自动的。