ASP.NET - DbUpdateException:DELETE语句与REFERENCE约束冲突

时间:2017-08-14 11:47:39

标签: c# asp.net entity-framework

我有一个Post模型,其虚拟ICollection类型为AspNetIdentityUser。

public class Post{
   public int Id { get; set; }
   public string Title { get; set; }
   public virtual ICollection<ApplicationUser> Views  { get; set; }
}

Post模型不应与ApplicationUser有任何关系,因为VIEWS属性只是作为一个计数器。我修改了IdentityModel。

但是在向集合中添加ApplicationUser之后,当我尝试删除Post对象时,我得到了一个DbUpdateException。

  

SqlException:DELETE语句与REFERENCE约束冲突&#34; FK_dbo.AspNetUsers_dbo.Posts_Post_Id&#34;。冲突发生在数据库&#34; aspnet-project-test-asp&#34;,table&#34; dbo.AspNetUsers&#34;,column&#39; Post_Id&#39;。

我使用此代码删除对象:

Post post = db.Posts.Find(id);
db.Posts.Remove(post);
db.SaveChanges();
return RedirectToAction("Index");

1 个答案:

答案 0 :(得分:1)

这是因为您的应用用户具有帖子Id作为foriegn键。您必须先删除引用Post的用户,然后删除帖子。

Post post = db.Posts.Find(id);
db.User.RemoveRange(post.Views);
db.Posts.Remove(post);
db.SaveChanges();
return RedirectToAction("Index");

或者,您应该将用户的PostId设置为Null,然后删除帖子。我认为User是一个单独的实体,它不能引用PostId。你能告诉你应用程序用户类吗?

此外,如果您可以粘贴两个表的记录截图,那就太棒了。

进一步向下添加以下代码应该添加到DbContext类的构造函数中,这将帮助您查看实体框架在输出窗口中执行的实际查询。

Database.Log = s => Trace.WriteLine(s);