entity framework不查数据库修改或排除指定字段集合通用方法

其中DataDBEntities为数据库实体对象,代码如下:

下载地址:http://files.cnblogs.com/stone_w/EFDBHelper.zip

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Data.Objects.DataClasses;
public class EFDBHelper
{
#region 不查数据库修改信息
/// <summary>
/// 不查数据库修改信息
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="entity"></param>
/// <param name="db"></param>
/// <param name="updateFiledType"></param>
/// <param name="fileds"></param>
/// <returns></returns>
public static int Update<T>(T entity, DataDBEntities db,
EnumUpdateFiledType updateFiledType, params string[] fileds)
{
if (null == db || null == entity)
{ // 参数有误
return 0;
}
Type _type = typeof(T);
db.AttachTo(_type.Name, entity);
if (null == fileds || fileds.Length == 0)
{ // 全字段操作
db.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);      // 手动设置为修改状态
        }
else
{ // 部分字段操作
var _stateEntry = db.ObjectStateManager.GetObjectStateEntry(entity);                    // 得到实体状态
if (EnumUpdateFiledType.字段修改 == updateFiledType)
{ // 部分字段修改
for (int i = 0; i < fileds.Length; i++)
{
_stateEntry.SetModifiedProperty(fileds[i]);
}
}
else
{ // 部分字段排除
PropertyInfo[] _properties = _type.GetProperties(); // 得到类的所有属性
foreach (PropertyInfo item in _properties)
{
if ("EntityState" == item.Name || "EntityKey" == item.Name)
{
continue;
}
// 主键判断 [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 根据特性判断主键
EdmScalarPropertyAttribute _edmScalarPropertyAttribute = 
              Attribute.GetCustomAttribute(item, typeof(EdmScalarPropertyAttribute)) as EdmScalarPropertyAttribute; if (null == _edmScalarPropertyAttribute || _edmScalarPropertyAttribute.EntityKeyProperty) { // 为主键或者导航属性 continue; } bool _thisIsUpdateFiled = true; // 是否为修改字段 for (int i = 0; i < fileds.Length; i++) { if (item.Name == fileds[i]) { _thisIsUpdateFiled = false; break; } } if (_thisIsUpdateFiled) _stateEntry.SetModifiedProperty(item.Name); } } } return db.SaveChanges(); } /// <summary> /// 不查数据库修改信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <param name="db"></param> /// <returns></returns> public static int Update<T>(T entity, DataDBEntities db) { if (null == db || null == entity) { // 参数有误 return 0; } Type _type = typeof(T); db.AttachTo(_type.Name, entity); db.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified); // 手动设置为修改状态 return db.SaveChanges(); } /// <summary> /// 不查数据库修改信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <param name="updateFiledType"></param> /// <param name="fileds"></param> /// <returns></returns> public static int Update<T>(T entity, EnumUpdateFiledType updateFiledType, params string[] fileds) { if (null == entity) { // 参数有误 return 0; } using (DataDBEntities db = new DataDBEntities()) { Type _type = typeof(T); db.AttachTo(_type.Name, entity); if (null == fileds || fileds.Length == 0) { // 全字段操作 db.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified); // 手动设置为修改状态 } else { // 部分字段操作 var _stateEntry = db.ObjectStateManager.GetObjectStateEntry(entity); // 得到实体状态 if (EnumUpdateFiledType.字段修改 == updateFiledType) { // 部分字段修改 for (int i = 0; i < fileds.Length; i++) { _stateEntry.SetModifiedProperty(fileds[i]); } } else { // 部分字段排除 PropertyInfo[] _properties = _type.GetProperties(); // 得到类的所有属性 foreach (PropertyInfo item in _properties) { if ("EntityState" == item.Name || "EntityKey" == item.Name) { continue; } // 主键判断 [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 根据特性判断主键 EdmScalarPropertyAttribute _edmScalarPropertyAttribute =
                Attribute.GetCustomAttribute(item, typeof(EdmScalarPropertyAttribute)) as EdmScalarPropertyAttribute; if (null == _edmScalarPropertyAttribute || _edmScalarPropertyAttribute.EntityKeyProperty) { // 为主键或者导航属性 continue; } bool _thisIsUpdateFiled = true; // 是否为修改字段 for (int i = 0; i < fileds.Length; i++) { if (item.Name == fileds[i]) { _thisIsUpdateFiled = false; break; } } if (_thisIsUpdateFiled) _stateEntry.SetModifiedProperty(item.Name); } } } return db.SaveChanges(); } } /// <summary> /// 不查数据库修改信息 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static int Update<T>(T entity) { if (null == entity) { // 参数有误 return 0; } using (DataDBEntities db = new DataDBEntities()) { Type _type = typeof(T); db.AttachTo(_type.Name, entity); db.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified); // 手动设置为修改状态 return db.SaveChanges(); } } #endregion } #region 修改时字段处理枚举 /// <summary> /// 修改时字段处理枚举 /// </summary> public enum EnumUpdateFiledType { 字段修改 = 1, 字段忽略 = 2 } #endregion

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

去马赛克神器 JavPlayer TG Modle 最新版

本帖最后由 cyberim 于 2019-8-28 22:13 编辑 -----知识点----- Mosaic的原理就是将1个像素的颜色填满一个小区域&#xff0c;所以在平面图片上是无法还原的--简单说就是单一图片的Mosaic不可逆! 但是…如果是Mosaic影片的话&#xff0c;一个Mosaic方格的中心点就会是一个原始影…

jQuery日期和时间插件(jquery-ui-timepicker-addon.js)中文破解版使用

简介 jQuery UI Datepicker日期选择插件很好用了&#xff0c;只不过只能精确到日&#xff0c;不能选择时间&#xff08;小时分钟秒&#xff09;很遗憾&#xff0c;而jquery-ui-timepicker-addon.js正是基于jQuery UI Datepicker的一款可选时间的插件。 官网地址&#xff1a;h…

Linux服务之httpd基本配置详解

当今主流的开源Web服务器软件有httpd(Apache),lighttpd,nginx,thttpd等&#xff0c;而httpd是迄今为止使用量多的web服务器&#xff0c;据统计目前httpd的全球占有量是47%左右&#xff0c;虽然有所下降但是使用两仍然是最多的&#xff0c;统计web服务器使用率的网站是&#xff…

超松弛迭代法解线性方程组c语言,超松弛迭代法解线性方程组.doc

PAGEPAGE 2姓名:___________________________设计题目:超松弛迭代法解线性方程组专业:摘要本文是在matlab环境下熟悉的运用计算机编程语言并结合超松弛变量超松弛迭代法的理论基础对方程组求解。首先&#xff0c;本文以微分方程边值问题为例&#xff0c;导出了离散化后线性方程…

Meidapipe 3D手势姿态跟踪算法,手机端实时检测 ,多个手势同时捕捉

Ubuntu安装MediaPipe 1. github下载Meidapipe代码2. [安装Bazel](https://docs.bazel.build/versions/master/install-ubuntu.html)3. Install OpenCV and FFmpeg4. 安装在Linux desktop运行需要的工具5. 运行Hello World desktop example安装Android SDK和NDK 1. 安装[Android…

android新建工程横屏,华为MatePad Pro构建的安卓平板横屏生态有何不同?来看看

在过去很多年中&#xff0c;Android 平板或者说 Android大屏设备一直受限于 Android生态的限制&#xff0c;无法发挥出本应具备的大屏使用体验&#xff0c;也正是因为这个原因&#xff0c;Android平板电脑一直被当做娱乐设备。在去年11月25日&#xff0c;华为正式发布了主打生产…

Flutter笔记:Web支持原理与实践

Flutter笔记 Web支持原理与实践 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com CSDN&#xff1a;https://blog.csdn.net/qq_28550263/article/details/135037756 华为开发者社区…

设置MAC 下 Vim 语法高亮显示

一&#xff1a;终端进入 cd /usr/share/vim/ 二&#xff1a; sudo vim vimrc 三&#xff1a;添加 syntax enablesyntax on 四&#xff1a;保存退出 转载于:https://www.cnblogs.com/cocoajin/p/3284604.html

外部服务发现之 ingress(一) traefik 的安装使用

Ingress其实就是从 kuberenets 集群外部访问集群的一个入口&#xff0c;将外部的请求转发到集群内不同的 Service 上&#xff0c;其实就相当于 nginx、haproxy 等负载均衡代理服务器&#xff0c;有的同学可能觉得我们直接使用 nginx 就实现了&#xff0c;但是只使用 nginx 这种…

ASP.NET MVC 3发布报错(ASP.NET MVC 3在没有安装环境的服务器上运行)的解决方案

前言 ASP.NET MVC 3在没有安装MVC3的环境的服务器上运行&#xff0c;就会报错&#xff0c;缺少引用&#xff0c;本文就为mvc3发布报错的解决方案。 解决方案 思路&#xff1a;提供ASP.NET MVC 3运行所需的的dll即可解决报错问题。 1、项目添加ASP.NET MVC 3的引用&#xff…

android 切换字体崩溃,androidx - 在Android 10 / Android Q上使用捆绑的ttf字体时崩溃 - 堆栈内存溢出...

将我的Android应用的目标级别从28更新为29(Android 10)后&#xff0c;该应用在Pixel 3(使用Android 10)上崩溃了。使用的版本Android Gradle插件3.5.0摇篮5.5.1问题&#xff1a;这是一个已知问题吗&#xff1f;细节崩溃发生在使用不同标签(TextView&#xff0c;androidx.appcom…

vsftp socket 报错

FTP显示数据 Socket 错误: 连接超时解决数据Socket错误及连接后为什么列表错误的解决方法 [右] 正打开数据连接 IP: 192.168.1 端口: 2226[右] 数据 Socket 错误: 连接被拒[右] 列表错误[右] PASV[右] 227 Entering Passive Mode (192,168,1,1,8,183)[右] 正打开数据连接 IP: 1…

Android Button 单击事件

方法一&#xff1a;在XML文件中指定 单击事件函数 <Button android:id"id/button1" android:layout_width"120dip" android:layout_height"wrap_content" android:layout_alignParentLeft"…

Python破解滑块验证码算法,完美避开人机识别

| 完美是不可能的&#xff0c;加个震惊&#xff01;Python破解BiliBili滑块验证码&#xff0c;完美避开人机识别&#xff0c;可以有 准备工作 B站登录页 https://passport.bilibili.com/loginpython3pip install selenium &#xff08;webdriver框架&#xff09;pip install P…

php 分页类

2019独角兽企业重金招聘Python工程师标准>>> 分页公式&#xff1a;页数&#xff08;总记录数-1&#xff09;/每页显示记录数1&#xff1b; 借助这个公式&#xff0c;实现以下分页类&#xff1b; <?php class Fpage{ private $total; //数据表中总记录数 …

Docker中的Nginx搭建HTTPS环境

准备 1.已安装好docker环境 2.申请好域名 3.SSL证书&#xff08;可选&#xff09; 一、安装Nginx docker pull nginx 查看docker镜像&#xff1a; docker images 二、进行配置 建目录用于存放nginx配置文件、证书文件 mkdir /opt/docker/nginx/conf.d -p touch /opt/docke…

Android的引用jar包

先来个基础的&#xff0c;在eclips里在工程名上右键->build path->contigure bud path->java build path里有个几个选项add external jars 增加工程外部的包add jars 增加工程内包add library 增加一个库add class folder 增加一个类文件夹下面着重介绍add libra…

Android木马分析实验,Android木马简介与分析

本文介绍基于Android的手机恶意软件&#xff0c;是一个基础性的介绍&#xff0c;给新入门的人提供一个分析和工具指引。要分析的木马是一个2013年的syssecApp.apk&#xff0c;这个木马的分析能对Android恶意软件有个大概了解。基础&#xff1a;1 –Android应用基础Android是goo…

Visual Studio 2012资源管理器里单击打开改为双击打开文件

Visual Studio 2012资源管理器里&#xff0c;单击打开文件改为双击打开文件&#xff0c;如图&#xff1a;

监控服务器容量 MOM

http://xxglx.jxcfs.com/net/zyk/htmlfiles/practice/practice00097.htm转载于:https://www.cnblogs.com/Kazaf/p/3286409.html