我有一个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");
答案 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);