0

首先,我是一个初学者,当我尝试通过将 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 中找不到。”

任何人都可以提供一些关于解决方案的想法吗?

4

2 回答 2

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

于 2013-07-15T13:13:34.227 回答
0

您好,首先您应该从其模型(连接到数据库)中获取用户,例如:您的模型名称是用户(_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()

}
于 2021-06-13T11:02:58.627 回答