在实体框架中定义外键

时间:2015-07-10 12:39:17

标签: c# asp.net-mvc entity-framework

我收到间歇性错误

  

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

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

我已经定义了一个具有1:1关系的表:

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


    public FinalisedServices Service { get; set; }

SpproFinalisedServices是外键的位置。我应该这样写:

     public int FinalisedSerivce_Id { get; set; }

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

或者添加虚拟就足够了:

    public virtual FinalisedServices Service { get; set; }

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

1 个答案:

答案 0 :(得分:1)

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

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

这不会定义一对一的关系。无论何时包含集合,您都要定义一对多或多对多。根据你的其他代码,我假设你要去一对多。即多个经理和员工在一项服务上。请检查tutorial。您不需要在Finalized Service上明确定义外键。对于有多个外键和/或外键的命名与外键表不同的情况。

你也不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)] - 这是约定优于配置 - 它默认会这样做。如果你将Id字段命名为奇怪的东西,你将需要它。当您为其命名时,它会自动生成&#34; Id。&#34;