gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:32:44 24 4
gpt4 key购买 nike

我根据这个答案实现了双向 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; }

. . .
}

其中,Student 是主要实体,而 Anamnesis 是共享 PK 的实体。

现在我希望创建的关系具有删除规则 = CASCADE。实际上,正在创建的关系具有 Delete Rule = NO ACTION,如下图所示:

enter image description here

如果我在“表属性”窗口中手动删除此关系并使用 Delete Rule = CASCADE 添加其他关系,则代码按我的预期工作,允许我删除一个学生,并且它是具有相同 ID 的共享 Anamnesis。

所以,这是我的问题:

有没有办法在我的类(class)中使用数据注释(不是 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();
}
}

enter image description here

关于ef-code-first - 使用共享主键关联时,EF 4.1 Code First 中的级联删除规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5825799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com