Dan*_*elC 4 asp.net entity-framework-core asp.net-core-mvc
这是我的模特:
public class Post
{
[Key]
public int PostId { get; set; }
[Required]
[MaxLength(140)]
public string Title { get; set; }
[Required]
public string ApplicationUserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public ICollection<Comment> Comments { get; set; }
}
public class Comment
{
[Key]
public int CommentId { get; set; }
[Required]
[StringLength(1000)]
public string Text { get; set; }
[Required]
public int PostId { get; set; }
[Required]
public string ApplicationUserId { get; set; }
public Post Post { get; set; }
public ApplicationUser ApplicationUser { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
在表'Comment'上引入FOREIGN KEY约束'FK_Comment_Post_PostId'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.无法创建约束或索引.查看以前的错误.
这正是它们在文档中的演示方式.
现在,如果我删除:
[Required]
public int PostId { get; set; }
Run Code Online (Sandbox Code Playgroud)
并使用Fluent API如下:
builder.Entity<Comment>().HasOne(p => p.Post).WithMany(c => c.Comments).IsRequired();
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误.如果我明确说明
builder.Entity<Comment>().HasOne(p => p.Post).WithMany(c => c.Comments).IsRequired().OnDelete(DeleteBehavior.Cascade);
Run Code Online (Sandbox Code Playgroud)
我仍然得到同样的错误.
如果我使用以下内容:
builder.Entity<Comment>().HasOne(p => p.Post).WithMany(c => c.Comments);
Run Code Online (Sandbox Code Playgroud)
可以在没有帖子的情况下输入评论.评论必须属于帖子.
我错过了什么吗?这是一个常见的用例,与PK所需的FK的1对多关系.
Dan*_*elC 10
我确实错过了一些东西.我的结构是用户可以拥有帖子.帖子可以有评论.由于评论也有用户,这就是造成循环问题的原因.
删除帖子后,它会级联删除评论.这就是我们想要的.
当用户被删除时,它会将删除级联到帖子和评论.但是帖子也会尝试级联删除评论.
我使用的解决方案是删除从User到Comment的级联删除.
这可以通过以下方式完成:
builder.Entity<Comment>().HasOne(c => c.ApplicationUser).WithMany(u => u.Comments).IsRequired().OnDelete(DeleteBehavior.Restrict);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1649 次 |
| 最近记录: |