【问题标题】:deleting entity in entity framework删除实体框架中的实体
【发布时间】:2014-08-05 23:30:43
【问题描述】:

我有这个实体:

public class User 
{
    public string UserName { get; set; }

    public string PasswordHash { get; set; }

    public string Mail { get; set; }

    public Image Photo { get; set; }

    public virtual List<Right> Rights { get; set; }

    public string Info { get; set; }

    public User()
    {
        Rights = new List<Right>();
    }        
}

我正在尝试以这种方式删除它:

public void Delete(User user)
        {
            using (var db = new  MyDbContext)
            {
                db.Rights.RemoveRange(user.Rights);
                db.Users.Remove(user);
                db.SaveChanges();
            }
        }

在我的上下文中,Image 和 Right 也是实体。在此删除中,我希望删除用户的权限,删除用户本身,但图像应保留在数据库中。

但是执行时抛出以下异常:

An unhandled exception of type 'System.ObjectDisposedException' occurred in EntityFramework.dll

Additional information: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

我正在使用 EF 6。

你知道如何解决这个问题吗? 谢谢

【问题讨论】:

  • 这真的是引发错误的代码吗?从错误消息中可以看出,您在处理完上下文后正在尝试做某事。
  • 哦,你说得对,实体的上下文已经被释放 :) 但是我怎样才能删除从不同上下文加载的实体呢?在实体中保留对该上下文的引用是一种好习惯吗?
  • 您可以将实体附加到新上下文。

标签: c# .net entity-framework


【解决方案1】:

我会一直这样做。

var db = new DatabaseEntities();
var item = db.TableName.Where(x=>x.id == id).FirstOrDefault();
db.TableName.Remove(item);
db.SaveChanges();

我希望这是有道理的。

【讨论】:

    【解决方案2】:

    在您的情况下,userObjectContext 可能已经被释放。所以你需要重新读取要删除的对象(userToDelete)。

    public void Delete(User user)
    {
      using (var db = new MyDbContext)
      {
         User userToDelete = db.Users.Where(u => u.Id == user.Id).SingleOrDefault();
         if(userToDelete != null) {
           db.Rights.RemoveRange(user.Rights);
           db.Users.Remove(user);
           db.SaveChanges();
         }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-24
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多