2012-01-13 163 views
1

我有一个类问题EF代码优先外键

CompareItems存储CurrentQuestion到其他问题的比较信息。

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; } 
} 

当我删除了一些质疑,我需要所有的问号,其中QuestionMark.Question == A.Id也删除了,因为它是没有必要有,如果不存在问题的信息进行比较。如何能够做到这一点而不进行QuestionMark.Question实体?也许EF有良好的API一些规则来设置QuestionMark.Question是问题的实体外键?

我不惯于做QuestionMark.Question为实体,因为这将需要改变目前的解决方案很多 - 是第一。此外,问题是一个相当重实体,并将其装载到多个时间分配值或删除或别的东西,会按业绩

回答

1

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

0

如果你不想做一个导航属性QuestionQuestionMark类,那么你需要通过“级联删除”手动创建外键。然后,当每一个问题被删除数据库将删除相关QuestionMark记录。

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

你还没有给出你为什么不想在EF中映射关系的理由,但我强烈建议你不要这样做。

+1

要添加,如果原因是“因为我想从QuestionMark对象访问问题编号”,则可以公开外键属性和导航属性。 – hvd 2012-01-13 08:57:54