ef-code-first – 使用共享主键关联时EF 4.1 Code中的级联删除规则

我基于这个答案实现了双向1:1关系:

Primary /Foreign Key in Entity Framework

我这样定义双向关系:

public class Student
{   
    public virtual int StudentId { get; set; }
    public virtual Anamnesis Anamnesis { get; set; }

    . . .
}

public class Anamnesis
{
    [Key,ForeignKey("Student")]
    public int AnamnesisId { get; set; }

    public virtual Student Student { get; set; }

    . . .
}

其中,学生是主要实体,Anamnesis是共享PK的实体.

现在我希望创建的关系有一个Delete Rule = CASCADE.实际上,正在创建的关系具有Delete Rule = NO ACTION,如下图所示:

如果我在“表格属性”窗口中手动删除此关系并使用“删除规则”=“CASCADE”添加其他关系,则代码将按照我的预期允许我删除学生并且它具有相同ID的共享Anamnesis.

所以,这是我的问题:

有没有办法在我的类中使用Data Annotation(不是Fluent API),以便获得与CASCADE删除规则的关系?我更喜欢使用数据注释,但如果不可能,我会对一些使这项工作的Fluent API代码感到满意.

注意

我已经尝试了这个post显示的Fluent API代码.在我有双向属性的情况下它不起作用.

解决方法

以下流畅的API代码完美地打开了数据库上的级联删除
public class Student
{   
    public virtual int StudentId { get; set; }
    public virtual Anamnesis Anamnesis { get; set; }
}

public class Anamnesis
{        
    public int AnamnesisId { get; set; }
    public virtual Student Student { get; set; }
}

public class Context : DbContext
{
    public DbSet<Student> Students { get; set; }
    public DbSet<Anamnesis> Anamnesises { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Student>()
                    .Hasrequired(s => s.Anamnesis)
                    .WithrequiredPrincipal(a => a.Student)
                    .WillCascadeOnDelete();
    }
}

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...