Ado.net EntityFramework的Update最简单方法

本文为转载,来源:http://lixiaolang87.diandian.com/post/2011-12-28/10344153 

 

网上看到很多朋友在Update的时候都会用如下方法:

var sel=from t in _dataEntities.Employee where t.Id=newEntity.Id select sel;

if(sel.Count()==0)return;

Employee entity = sel.First();

entity.Name = newEntity.Name;

.......

简单的说就是将新对象的属性一个个复制,这样做当属性少的时候还可以,但属性多的时候就显的低效率,代码又长又恶心。所以自己总结出了UPDATE最简单的方法。

/// <summary>

    /// 修改员工信息

    /// </summary>

    /// <param name="newEntity"></param>

    /// <returns></returns>

    [OperationContract]

    public Employee UpdateEmployee(Employee newEntity)

    {

        _dataEntities.Employee.Attach(newEntity); // 附加对象

        _dataEntities.ApplyCurrentValues<Employee>("Employee", newEntity); // 应用新对象

        _dataEntities.ObjectStateManager.ChangeObjectState(newEntity, EntityState.Modified); // 修改对象状态,当EntityState为Modified时,SaveChanges才会执行变更,否则无效。

        return CommitAllChanges<Employee>(newEntity);

    }

以下是泛型方法,适用于增删改的数据保存,同时解决了并发冲突。

/// <summary>

    /// 应用数据变更

    /// </summary>

    /// <typeparam name="T"></typeparam>

    /// <returns></returns>

    private T CommitAllChanges<T>(T entity)

    {

        try

        {

            // 解决并发冲突

            if ((entity as EntityObject).EntityState!=EntityState.Added)

                _dataEntities.Refresh(RefreshMode.ClientWins, entity);

            _dataEntities.SaveChanges();

        }

        finally

        {

            if ((entity as EntityObject).EntityState != EntityState.Detached)

                _dataEntities.Refresh(RefreshMode.StoreWins, entity);

        }

 

        return entity;

    }

转载于:https://www.cnblogs.com/ashui/archive/2013/05/02/3054635.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值