• 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;

        }

  • 相关阅读:
    light oj 1007
    51nod 1298 圆与三角形
    codeforces 899C Dividing the numbers
    zznu 1996 : 正三角形和圆的爱情
    zznu 2081 : 舰队管理
    zzun 2076 : 三花聚顶神功
    zznu 2054 : 油田
    机械设备--第九届省赛--深搜
    设计模式-单例模式、工厂模式
    Spring Boot 遇到空指针
  • 原文地址:https://www.cnblogs.com/ashui/p/3054635.html
Copyright © 2020-2023  润新知