gpt4 book ai didi

ASP.NET 5 (MVC6) EF7 外键可能导致循环

转载 作者:行者123 更新时间:2023-12-04 22:44:02 25 4
gpt4 key购买 nike

这是我的模型:

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; }

}

我收到错误:

Introducing FOREIGN KEY constraint 'FK_Comment_Post_PostId' on table 'Comment' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint or index. See previous errors.



这正是他们在 documents 中展示的方式。 .

现在,如果我删除:

[Required]
public int PostId { get; set; }

并使用 Fluent API 如下:

builder.Entity<Comment>().HasOne(p => p.Post).WithMany(c => c.Comments).IsRequired();

我仍然遇到同样的错误。如果我明确说明

builder.Entity<Comment>().HasOne(p => p.Post).WithMany(c => c.Comments).IsRequired().OnDelete(DeleteBehavior.Cascade);

我仍然遇到同样的错误。

如果我使用以下内容:

builder.Entity<Comment>().HasOne(p => p.Post).WithMany(c => c.Comments);

可以在没有帖子的情况下输入评论。评论必须属于帖子。

我错过了什么吗?这是一个常见的用例,一对多关系与所需的 FK 到 PK。

最佳答案

我确实错过了一些东西。我的结构是用户可以有一个帖子。一个帖子可以有评论。由于评论也有用户,这就是导致循环问题的原因。

当一个帖子被删除时,它会级联删除评论。这就是我们想要的。

当一个用户被删除时,它会将删除级联到一个帖子和一个评论。但是 Post 也会尝试将删除级联到评论。

我使用的解决方案是删除从用户到评论的级联删除。

这是通过以下方式完成的:

builder.Entity<Comment>().HasOne(c => c.ApplicationUser).WithMany(u => u.Comments).IsRequired().OnDelete(DeleteBehavior.Restrict);

关于ASP.NET 5 (MVC6) EF7 外键可能导致循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35519336/

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