使用存储库

时间:2016-05-16 10:57:48

标签: c# asp.net-mvc

很抱歉,我是ASP.NET的新手之一,我正在努力解决为什么我的删除方法无效。

他的方法是:

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Domain domain)
{
    var rep = new Repository<Site>();
    var siteRecordFromDomainObject = _mapper.Map<Site>(domain);
    rep.Delete(siteRecordFromDomainObject);

    return View(domain);
}

这是来自存储库的代码:

public void Delete(TObject t)
{
    _context.Set<TObject>().Remove(t);
    _context.SaveChanges();
}

有人能告诉我为什么会收到此错误:

  

无法删除该对象,因为在该对象中找不到该对象   ObjectStateManager。

1 个答案:

答案 0 :(得分:0)

对象需要已加载或附加到上下文,以便能够将其删除。

使用标识符在对象的上下文中执行搜索/查找。找到对象后,您可以将其从上下文中删除。

鉴于所涉及的模型的结构在此答案时尚不清楚,这里是一个如何进行删除的例子。

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(Domain domain) {
    var rep = new Repository<Site>();
    //Assuming Repository has some means of retrieving entities,
    //get the site from repository using a common identifier
    var siteRecord = rep.FirstOrDefault(s => s.id == domain.id);
    if(siteRecord !=null) {
        //if a record is found, remove it from repository
        rep.Delete(siteRecord);
    }

    return View(domain);
}