C# Fluent API未以一对一的关系在删除时级联

C# Fluent API未以一对一的关系在删除时级联,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我有两门课: public class Student { public long StudentId { get; set; } public StudentDetails details { get; set; } } public class StudentDetails { public long StudentDetailsId { get; set; } public Student student{ get; set; } //other

我有两门课:

public class Student
{
    public long StudentId { get; set; }
    public StudentDetails details { get; set; }
}

public class StudentDetails
{
    public long StudentDetailsId { get; set; }
    public Student student{ get; set; }
    //other properties
}
一个学生包含一个学生详细信息。如果没有相应的学生,则studentdetails不能存在

使用这些映射:

    public StudentMapping()
    {
        this.ToTable("Student");

        this.HasKey(x => x.StudentId);

        this.HasRequired(x => x.details)
            .WithRequiredDependent(x => x.student)
            .WillCascadeOnDelete(true);
    }

    public StudentDetailsMapping()
    {
        this.ToTable("StudentDetails");

        this.HasKey(x => x.StudentDetailsId);

        this.HasRequired(x => x.student);
    }
但是,当我转到SQL Management Studio中的数据库并执行以下操作时:
DELETE FROM StudentId==1的STUDENTS时,会删除Student行,但删除不会级联到studentdetails行。怎么了?当我删除StudentDetails行的StudentParent对象时,我正试图将其删除。

您是否检查了MSDN上的SO和文章

如我所见,您的模型不是真正的一对一关系,因为这里的两个实体不共享相同的主键

当您对这样的关系进行建模时,实际上是在数据库中创建一个一对多表结构:如何防止StudentDetailsId不被其他学生使用?我的意思是,你可以用商业规则来强制执行,但严格来说没有规则

如果您想以一对一的方式使用EF强制执行级联删除,则需要执行以下操作:

public class Student
{
    public long StudentId { get; set; }
    public StudentDetails details { get; set; }
}

    public class StudentDetails
    {
        public long StudentId { get; set; }
        public Student student{ get; set; }
        //other properties
    }

public StudentMapping()
    {
        this.ToTable("Student");

        this.HasKey(x => x.StudentId);

        this.HasRequired(x => x.details)
            .WithRequiredDependent(x => x.student)
            .WillCascadeOnDelete(true);
    }

    public StudentDetailsMapping()
    {
        this.ToTable("StudentDetails");

        this.HasKey(x => x.StudentId);

        this.HasRequired(x => x.student);
    }

希望有帮助:)

这帮了我的忙,谢谢。我需要阅读EF code first如何建模不同的关系多重性类型!