在ObjectStateManager中找不到它

时间:2017-03-09 09:34:15

标签: c# asp.net asp.net-mvc visual-studio asp.net-web-api

我有从MSSQL数据库中删除数据的代码。

    [HttpPost]
    public ActionResult DeleteData(PartnerStudy partner)
    {
        var partnerStudy = GetByID(partner.Idetity);
        DomainRepository repository = new DomainRepository();
        repository.Delete(partnerStudy);
        repository.SaveChanges();
        return RedirectToAction("ShowData");
    }

    public PartnerStudy GetByID(int id)
    {
        DomainRepository repository = new DomainRepository();
        //PartnerStudy partner = repository.GetItem<PartnerStudy>(id);

        var partner = repository.GetItem<PartnerStudy>(id);
        repository.Dispose();
        return partner;

    }

DomainRepository中有这个

public void Delete<T>(T item) where T : class, IEntity
{
    Set<T>().Remove(item);
}

我有一个问题。 如果我尝试删除行Set<T>().Remove(item);

中的错误
  

{&#34;无法删除该对象,因为找不到该对象   ObjectStateManager&#34;}

什么意思? 为什么找不到ObjectStateManager? 谢谢你的回答!

1 个答案:

答案 0 :(得分:0)

您需要将存储库变量作为参数发送到GetByID()方法,并使用相同的存储库来获取和删除项目。

[HttpPost]
public ActionResult DeleteData(PartnerStudy partner)
{
    using(var repository = new DomainRepository())
    {
        var partnerStudy = GetByID(partner.Idetity, repository);
        repository.Delete(partnerStudy);
        repository.SaveChanges();
    }
    return RedirectToAction("ShowData");
}

private PartnerStudy GetByID(int id, DomainRepository repository)
{
    var partner = repository.GetItem<PartnerStudy>(id);
    return partner;

}

我甚至添加了一个using块,因为看起来DomainRepository实现了IDisposable。