Entity framework EF代码第一外键

Entity framework EF代码第一外键,entity-framework,foreign-keys,ef-code-first,Entity Framework,Foreign Keys,Ef Code First,我有一个课堂问题 比较项存储当前问题与其他问题的比较信息 public class Question { public virtual ICollection<QuestionMark> CompareItems { get; set; } } public class QuestionMark { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get

我有一个课堂问题

比较项存储当前问题与其他问题的比较信息

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; }
}
公开课问题
{
公共虚拟ICollection CompareItems{get;set;}
}
公开课问号
{
[Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共整数问题{get;set;}//其他问题的存储ID
公共小数标记{get;set;}
}
当我删除某个问题A时,我需要删除所有问号,其中问号QuestionMark.question==A.Id,因为如果问题不存在,就不需要比较信息。不做问号怎么可能做到这一点。问一个实体?也许EF在Fluent API中有一些规则来设置问号。问题是问题实体上的外键吗


我不习惯做问号。问题作为一个实体,因为它需要改变当前的解决方案批次——这是第一次。此外,问号是一个相当重的实体,要多次加载它以赋值或删除或执行其他操作,将按性能键

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

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


您没有给出不想在EF中映射关系的原因,但我强烈建议您不要这样做。

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

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


您没有给出不想在EF中映射关系的原因,但我强烈建议您不要这样做。

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

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

要添加,如果原因是“因为我想从问号对象访问问题编号”,您可以公开外键属性和导航属性。要添加,如果原因是“因为我想从问号对象访问问号”,您可以公开外键属性和导航属性。