EF代码优先的外键

时间:2012-01-13 08:37:38

标签: entity-framework foreign-keys ef-code-first

我有课程问题

CompareItems store CurrentQuestion-to-OtherQuestion比较信息。

public class Question 
{
    public virtual ICollection<QuestionMark> CompareItems { get; set; }
}


public class QuestionMark
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int Question { get; set; } //Store ID of OtherQuestion
    public decimal Mark { get; set; }
}

当我删除一些问题A时,我需要所有QuestionMark,其中QuestionMark.Question == A.Id也被删除,因为如果问题不存在则不需要比较信息。如何在不使QuestionMark.Question成为实体的情况下做到这一点?也许EF在Fluent-API中有一些规则来设置QuestionMark.Question是Question实体的外键吗?

我不会将QuestionMark.Question作为实体,因为它需要更改当前的解决方案 - 是第一个。此外,问题是一个非常沉重的实体,加载它多次分配价值或删除或其他东西将按性能

2 个答案:

答案 0 :(得分:1)

我认为可以将应用程序更改为使用实体而不是id,因为默认情况下EF使用延迟加载并且不会导致性能问题。我认为使用一些流畅的API设置或属性只能使用id而不是实体。

答案 1 :(得分:0)

如果您不想在Question类中创建导航属性QuestionMark,则需要使用“级联删除”手动创建外键。然后,当每个问题都被删除时,数据库将删除相关的QuestionMark记录。

然而,这种方法存在EF问题。因为EF不知道这些实体之间存在“级联删除”关系。因此,EF中本地跟踪的实体可能存在不一致。

你没有说明为什么你不想在EF中映射关系,但我强烈建议你反对它。