【问题标题】:Cannot remove data record in ASP.NET MVC无法删除 ASP.NET MVC 中的数据记录
【发布时间】:2013-07-13 08:44:06
【问题描述】:

首先,我是一个初学者,当我试图通过将 id 通过视图传递给控制器​​来删除 sql 中的记录时,下面是我的代码:

注意:“用户名”是表“T_Users”中的 PK

#region Delete record function
        public ActionResult Delete(string id ) {
            T_Users temp_u = new T_Users() { Username = id  };
            //db.T_Users.Attach(new T_Users() { Username = id });
            db.T_Users.Remove(temp_u);


            try
            {
                db.SaveChanges();
                //return View();
            }
            catch(Exception e) {
                return Content("hehe");
            }
            return RedirectToAction("Index");
        }
        #endregion

当我调用 T_Users.Attach() 方法时,它说“ObjectStateManager 中已经存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象”

然后我评论说,它失败了,因为“无法删除对象,因为它在 ObjectStateManager 中找不到。”

谁能提供一些关于解决方案的想法?

【问题讨论】:

  • 这个问题是关于 EF,而不是关于 ASP.NET MVC。您不应该使用 ID 创建对象,您应该获取它然后删除。
  • Mn.... 但我做了搜索,没有发现插入呢?没有对象,因为它是新的吧?

标签: asp.net asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:

您好,首先您应该从其模型(连接到数据库)中获取用户,例如:您的模型名称是 User (_context 是数据库上下文的实现 例如:我有一个名为 ShopContext 的数据库上下文,在 ShopContext 中我有

public class ShopContext : DbContext
{

    public DbSet<User> Users { get; set; }

    public ShopContext(DbContextOptions<ShopContext> options) : base(options)
    {

    }

}

已删除用户:

 private readonly ShopContext _context;


 public AdminService(ShopContext context)
 {
    _context = context;
 }

首先我们像上面一样注入代码,然后我们可以创建方法来删除 id 的使用

public void deleteUserById(int id)
{
 User user = _context.Users.Find(id);
    _context.Users.Remove(user);
    _context.SaveChanges()

}

【讨论】:

    【解决方案2】:

    在尝试删除对象之前,您不会从数据上下文中检索对象,而是创建一个新的分离对象,并分配与现有对象相同的 id 并尝试将其删除。

    您应该首先从数据上下文中检索要删除的对象,然后对检索到的对象发出删除命令。这是一个 ORM,因此您不只是生成要执行的 SQL,而是管理映射的对象。

    我希望这会有所帮助。

    不是一个大的 EF 用户,但你可以用它做这样的事情:

    var user = db.T_Users.First(e => e.Username == id);
    db.T_Users.Delete(user);
    

    尽管有很多这样的 EF 教程:

    http://www.codeproject.com/Articles/37932/Simple-Sample-with-Entity-Framework

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2010-12-17
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多