Ado.net EntityFramework的Update最简单方法
2013-11-30 01:34
483 查看
Ado.net EntityFramework的Update最简单方法
网上看到很多朋友在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;
}
相关文章推荐
- 2010年浙江大学计算机及软件工程研究生机试真题 A+B
- 运行cmd直接进入指定目录下的命令
- 数组的定义形式
- Android 4.3 WIN7 64位系统 开发环境搭建 android sdk+eclipse
- 第一次写简历
- Jquery moblie中的分栏布局
- Udev
- liunx基本命令的学习
- 下载站运行广告合作exe文件然后再运行程序文件的bat
- 将字符串中各单词首字母转化成大写,使用回调函数实现[函数指针]
- 并查集专题总结
- 剑指Offer - 九度1515 - 打印1到最大的N位数
- switch case break default 判断语句
- CF Round216
- 排序算法适用性和稳定性总结
- mysql分区技术实验
- 卡尔曼滤波及其MATLAB程序
- android 2D 游戏的开发的方法
- Ubuntu安装Wine
- 先序 中序 后序 非递归遍历