前进路上,我们都曾经迷失!

使我停下来的,不是我所见,而是我所未见…… 你能体会吗?那些我看不清的东西,在那延绵不断的城市中,我能看到一切,可就是看不到尽头…… 什么都有,就是没有尽头……而尽头,正是我所未见。—— KimiYang

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近做个一个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        
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();
        }
 }

此代码可能存在着各种漏洞。大家有什么好的方法可以回复。小弟先在此谢谢了。。。

posted on 2011-04-20 14:57  KimiYang  阅读(2371)  评论(9编辑  收藏  举报