今天在通过反射判读实体属性来映射数据库表是否修改的时候发现,最开始我通过

p.GetValue(entity) == null && p.PropertyType.IsValueType

  来判断的时候,只能判断出实体中是否为值类型和null,如果满足就不会去修改该属性的值

_dbContext.Entry<T>(entity).Property(p.Name).IsModified = false;

  但是在实际使用中发现,如果该model类中既有class实体类型,又有string类型将无法判断(string是值类型还是引用类型,可以看看该帖子http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html说的比较详细),所以我们需要单独判断一下string类型,可能有人说通过IsNullOrEmpty来判断,那么我告诉你在通过反射来做的时候是行不通的,因为对应的属性值可能为null,通过IsNullOrEmpty判断class为null时直接回抛异常的,通Type.getType()也是行不通的,因为string a=null通过Type.getType(a)也会抛异常。所以还是需要通过PropertyType类型来判断,判断方式为 p.PropertyType == typeof(string) 这样即可判断出来。好了就到这里,部分代码如下,不喜勿喷。

  foreach (System.Reflection.PropertyInfo p in entity.GetType().GetProperties())
{
if (p.GetValue(entity) == null && (p.PropertyType.IsValueType || p.PropertyType == typeof(string)))
{
_dbContext.Entry<T>(entity).Property(p.Name).IsModified = false;
}
}

  

C#关于通过反射PropertyType判读字符串类型方法的更多相关文章

  1. c# 利用反射 从json字符串 动态创建类的实例 并动态为实例成员赋值

    转自 http://hi.baidu.com/wjinbd/item/c54d43d998beb33be3108fdd 1 创建自己要用的类 class stu { string _name; int ...

  2. StackExchange.Redis帮助类解决方案RedisRepository封装(字符串类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文链接 http://www.cnblogs.com/tdws/tag/NoSql/ 目录 一.基础配置封装 二.String字符串类型数据操作封 ...

  3. Redis命令拾遗一(字符串类型)

    文章归博客园和作者“蜗牛”共同所有 .转载和爬虫请注明原文Redis系列链接 http://www.cnblogs.com/tdws/tag/NoSql/ Redis有五种基本数据类型.他们分别是字符 ...

  4. Java中,关于字符串类型、随机验证码、 时间类型

    一.字符串类型:String类型 定义一个字符串 String a="Hello World"; String b= new String ("Hello World&q ...

  5. 学习笔记:MySQL字符串类型

    字符串类型 a)         char和varchar 1.都需要指定字符的长度,char中的长度是字符的长度,而varchar的长度是字节的长度 2. char中指定的长度就是实际占用的长度,而 ...

  6. Redis常用命令入门1:字符串类型命令

    Redis总共有五种数据类型,在学习的时候,一定要开一个redis-cli程序,边看边练,提高效率. 一.最简单的命令 1.获得符合规则的键名列表 keys * 这里的*号,是指列出所有的键,同时*号 ...

  7. Java里面,反射父类里面数字类型字段,怎么set值

    Java里面,反射父类里面数字类型字段,怎么set值,我的做法是这样: /** * TODO 直接设置对象属性值, 忽略private/protected 修饰符, 也不经过setter * @aut ...

  8. Spark1.3使用外部数据源时条件过滤只要是字符串类型的值均报错

    CREATE TEMPORARY TABLE spark_tbls USING org.apache.spark.sql.jdbc OPTIONS ( url 'jdbc:mysql://hadoop ...

  9. Redis从基础命令到实战之字符串类型

    字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串和和二进制数据.本文以代码形式列举常用的操作命令,并在实践部分演示一个简单的商品管理功能,实现了通常使用关系型数据库开发的增改查功能,注 ...

随机推荐

  1. Fedora25和win10双系统安装及使问题汇总

    安装问题汇总 1.U盘引导制作后,开机出现":Assuming driver cache: write through" 解决方案:经过排查后,怀疑是U盘启动制作出了问题,后来查阅 ...

  2. 盼盼Degenerate——清除浮动的方法

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

  3. 80C51学习 流水灯

    /* c语言常用预处理命令 1.#define使用 #define A PO 后面不用加分号. #define PI 3.14 2.循环左移右移函数 _crol_(a,b)循环左移函数,a是左移的值, ...

  4. 使用百度云同步盘和Git Extensions进行代码托管

    一.软件安装 百度云同步盘和Git Extensions的安装和配置略过. 二.建立Git代码库,以[GHO2VMDK转换工具]项目为例 1. 建立本地代码库 进入[GHO2VMDK转换工具]项目文件 ...

  5. jenkins 设置 gitlab web hooks

    背景 接口自动化期望代码push后触发实现持续集成,代码push后,自动化执行jenkins的job. 步骤 准备工作 工具:jenkins,gitlab jenkins需要安装插件:git plug ...

  6. 横排列表(li)的左右对齐

    效果如下: HTML代码如下: <div class="overdiv"> <ul> <li>1</li> <li>2& ...

  7. Android笔记: 播放提示音 的简单方法

    public static void sendSound(Context mContext) { //上下文 Uri mUri= RingtoneManager.getDefaultUri(Ringt ...

  8. 关于DreamWeaver CS6.0 + PhoneGap 之移动开发环境搭建

    原博客地址为:http://blog.csdn.net/alovebtoc/article/details/9315437  HTML5已经逆袭了移动开发,近期有幸布置PhoneGap的环境搭载,其实 ...

  9. 可编辑的EditorGridPanel

    1.创建pannel是为可编辑的: new Ext.grid.EditorGridPanel 2.设置单击可以编辑属性: clickstoEdit: 1 3.在列设置添加文本编辑框 {header:& ...

  10. webpack打包处理html、css、js、img、scss文件

    webpack --help 查看webpack命令启动服务 npm run dev (先配置好服务)进入对应文件夹并初始化npmcd demo npm init 安装webpack npm inst ...