我有课程问题
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作为实体,因为它需要更改当前的解决方案 - 是第一个。此外,问题是一个非常沉重的实体,加载它多次分配价值或删除或其他东西将按性能
答案 0 :(得分:1)
我认为可以将应用程序更改为使用实体而不是id,因为默认情况下EF使用延迟加载并且不会导致性能问题。我认为使用一些流畅的API设置或属性只能使用id而不是实体。
答案 1 :(得分:0)
如果您不想在Question
类中创建导航属性QuestionMark
,则需要使用“级联删除”手动创建外键。然后,当每个问题都被删除时,数据库将删除相关的QuestionMark
记录。
然而,这种方法存在EF问题。因为EF不知道这些实体之间存在“级联删除”关系。因此,EF中本地跟踪的实体可能存在不一致。
你没有说明为什么你不想在EF中映射关系,但我强烈建议你反对它。