Sam*_*ami 113 c# asp.net entity-framework-4
我收到此错误"无法删除该对象,因为它在ObjectStateManager中找不到."
我的代码是:
protected MyEntities sqlEntities;
public virtual void Delete(TEntity entity)
{
System.Type t = typeof(TEntity);
sqlEntities.DeleteObject(entity);
sqlEntities.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
Lad*_*nka 154
这意味着实体未附加(它未被相同的上下文实例加载).试试这个:
protected MyEntities sqlEntities;
public virtual void Delete(TEntity entity)
{
sqlEntities.Attach(entity);
sqlEntities.DeleteObject(entity);
sqlEntities.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
Kja*_*tan 60
只是对Ladislav Mrnka的答案进行了一点澄清(应该是接受的答案).
如果像我一样,你有一个像这样的格式的代码:
using (var context = new MyDataContext())
{
context.MyTableEntity.Remove(EntytyToRemove);
var nrOfObjectsChanged = context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
..那么你想做什么:
using (var context = new MyDataContext())
{
// Note: Attatch to the entity:
context.MyTableEntity.Attach(EntityToRemove);
context.MyTableEntity.Remove(EntityToRemove);
var nrOfObjectsChanged = context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
也许这似乎是显而易见的,但我最初并不清楚有必要指定要附加的实体,而不仅仅是上下文.
esb*_*enr 10
只是为了解释Kjartans的解释:
我有:
public Project DeleteProject(int id)
{
using (var context = new Context())
{
var p = GetProject(id);
context.Projects.Remove(p);
context.SaveChanges();
return p;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我使用自己的方法(GetProject())来获取实体(因此使用另一个上下文来加载实体):
public Project GetProject(int id)
{
using (var context = new Context())
{
var project = context.Projects
.Include(p => p.Reports.Select(q => q.Issues.Select(r => r.Profession)))
.Include(p => p.Reports.Select(q => q.Issues.Select(r => r.Room)))
.SingleOrDefault(x => x.Id == id);
return project;
}
}
Run Code Online (Sandbox Code Playgroud)
一种解决方案可能是将加载的实体附加为Kjartan状态,另一种可能是我的解决方案,以在同一上下文中加载实体:
public Project DeleteProject(int id)
{
using (var context = new Context())
{
var p = context.Projects.SingleOrDefault(x => x.Id == id);
if (p == null)
return p;
context.Projects.Remove(p);
context.SaveChanges();
return p;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
86362 次 |
最近记录: |