2015-07-10 167 views
0

同时节省不为他们的关系实体框架中定义外键

我相信这可能是因为我有暴露的外键属性的实体,我收到一个间歇性的错误

错误没有在我的实体框架数据库层中正确定义我的关系。

我有一个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; } 

我原本认为实体框架会处理在后台数据库中的外键。

+0

你看过内部异常吗?那(通常)显示EF正在遇到问题的实体和关系。这应该有助于诊断问题。 –

+0

问题只发生在直播系统上。我需要标识内部异常,但希望在它再次发生之前解决它 – michael

回答

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

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

这没有定义一对一的关系。任何时候你包括一个集合,你正在定义一对多或多对多。根据您的其他代码,我假设您将采用一对多的方式。即多个管理人员和一个服务人员。请检查这个tutorial。您无需在Finalized Service上明确定义外键。这是针对多个外键和/或外键与外键表命名不同的情况。

你也不需要[DatabaseGenerated(DatabaseGeneratedOption.Identity)] - 它是通过配置约定 - 它会默认执行它。如果您将Id字段命名为奇怪,那么您需要这样做。当您将其命名为“Id”时,它会自动进行。

+0

抱歉,我不应该包含多对多的关系。他们无关的问题,但我想答案是他们不是必需的,而不是我的问题 – michael

+0

你需要发布你的整个表。如果某些东西是专有的,请更改名称,只要确保它们是一致的 - 最终的“s”等小事情以及您在这里命名事物的方式,我相信您知道。 – VSO

+0

@michael:作为一个例子public finalisedServices Service {get;组; } - 这需要是“FinalizedService”,而不是复数。假设你有一项服务。否则,它需要成为一个服务集合。 – VSO