我想删除重复但聪明的用户,他们发现他们可以使用多个电子邮件创建一个帐户。我的应用程序有一个UserLog用于通过网站跟踪我的用户以进行风险管理的方式。这里是我的用户日志类:如何删除我的身份用户?
public class UserLog
{
public int Id { get; set; }
public ApplicationUser Customer { get; set; }
public DateTime LogDate { get; set; }
}
在我ManageUsers
控制器我知道我需要删除由用户创建之前,我删除的用户,因为FK_constraint
我在课堂上创建的日志。最后我试图删除用户。这里是我的尝试:
public ActionResult Delete(string UserName)
{
var ocustomerId = User.Identity.GetUserId();
var oCustomer = _context.Users.Single(u => u.Id == ocustomerId).ToString();
//delete user logs
_context.UserLogs
.Where(p => p.Customer.Id == oCustomer)
.ToList()
.ForEach(p => _context.UserLogs.Remove(p));
_context.SaveChanges();
//finally delete from aspnetUsers table
var thisUser =
_context.Users.FirstOrDefault(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase));
_context.Users.Remove(thisUser);
_context.SaveChanges(); \\it breaks here
return RedirectToAction("Index");
}
正如预期的代码的第一部分工作正常删除用户的用户创建的日志。该错误发生在第二个context.SaveChanges()
上。
通过断点产生的错误是:发生在EntityFramework.dll
DbUpdateException错误
然而,实际的错误页面上产生的误差如下:
DELETE语句与REFERENCE约束“FK_dbo.UserLogs_dbo.AspNetUsers_Customer_Id”冲突。在数据库“myDB”,表“dbo.UserLogs”,列'Customer_Id'中发生冲突 。 声明已被终止。
工作!另外,我已经在我的应用程序中删除了其他地方,我调用了SaveChanges()两次。除了是一种代码味道之外,你能详细说明为什么它不好吗? – Skullomania
这并不坏,有时你真的需要在一个函数中多次调用SaveChanges。通过调用SaveChanges,您可以将缓存的EF对象从当前上下文提交到数据库。所以在你的例子中你有两个问题。 1.您试图从数据库中删除日志,只需在上下文中选择它们(第一次savechanges调用),然后尝试删除错误的用户。每次您完成数据库工作时调用savechanges,或者在继续使用该方法之前确实需要保存数据。 – DolceVita