我基于这个答案实现了双向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(); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。