最近做个一个EntityFramework的DEMO,刚开始做的时候在删除跟修改数据时采取的是根据ID查询到对应实体,然后再删除和更新实体,发现这样做多查询了一次数据库。尤其是做修改的时候,还得每个属性进行赋值修改,加大了代码量。 因此寻找另一条出路,思路大概是这样的:首先获取需要修改或者删除的对象,根据EntityKey判断上下文中是否存在,假如存在,则移除上下文中的对象。然后把获取到的对象附加到对象上下文中,再将上下文更新保存的数据库。
View Code
1 public void Update(Student entity)
2 {
3 entity.EntityKey = Session.CreateEntityKey("Students", entity);
4 object s=new Student();
5 if (Session.TryGetObjectByKey(entity.EntityKey, out s))
6 {
7 Session.ObjectStateManager.ChangeObjectState(s, System.Data.EntityState.Deleted);
8 Session.Detach(s);
9 }
10 Session.Attach(entity);
11 Session.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
12 Session.SaveChanges();
13
}
2 {
3 entity.EntityKey = Session.CreateEntityKey("Students", entity);
4 object s=new Student();
5 if (Session.TryGetObjectByKey(entity.EntityKey, out s))
6 {
7 Session.ObjectStateManager.ChangeObjectState(s, System.Data.EntityState.Deleted);
8 Session.Detach(s);
9 }
10 Session.Attach(entity);
11 Session.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
12 Session.SaveChanges();
13
public void Delete(Student entity)
{
entity.EntityKey = Session.CreateEntityKey("Students", entity);
object s = new Student();
if (Session.TryGetObjectByKey(entity.EntityKey, out s))
{
Session.Students.DeleteObject((Student)s);
}
else
{
Session.AttachTo("Students", entity);
Session.Students.DeleteObject(entity);
}
Session.SaveChanges();
}
{
entity.EntityKey = Session.CreateEntityKey("Students", entity);
object s = new Student();
if (Session.TryGetObjectByKey(entity.EntityKey, out s))
{
Session.Students.DeleteObject((Student)s);
}
else
{
Session.AttachTo("Students", entity);
Session.Students.DeleteObject(entity);
}
Session.SaveChanges();
}
此代码可能存在着各种漏洞。大家有什么好的方法可以回复。小弟先在此谢谢了。。。