接下来放一个用SqlBulkCopy插入数据的例子,运用了泛型委托和反射。就当好好的运用这些知识。

public static void AddEntityByBulk(IList entitys,string TableName) where TEntity : class

{

using (context = new MyDbContext())

{

//接下来就是批量插入

using (var bulkCopy = new SqlBulkCopy((SqlConnection) context.Database.Connection))

{

bulkCopy.BatchSize = entitys.Count;

bulkCopy.DestinationTableName = TableName;

var table = new DataTable();

Type reccordType = typeof (TEntity);//获取模板类型

PropertyInfo[] propertys = reccordType.GetProperties();

foreach (PropertyInfo property in propertys)

{

if (!property.GetGetMethod().IsVirtual)

{

table.Columns.Add(property.Name, property.PropertyType);

}

}

foreach (var entity in entitys)

{

var dr = table.NewRow();

foreach (var property in propertys)

{

if (!property.GetGetMethod().IsVirtual)

dr[property.Name] = property.GetValue(entity,null);

}

table.Rows.Add(dr);

}

if (context.Database.Connection.State != System.Data.ConnectionState.Open)

{

context.Database.Connection.Open();

}

bulkCopy.WriteToServer(table);

context.Database.Connection.Close();

}

}

}

接下来主要是对反射部分的抽与总结​:

1 Type reccordType = typeof (TEntity);

​ 获取模板类型​,无论是泛型还是实体类型,总之先获取他的类型格式,以方便反射内部的属性,字段以及方法。

2 PropertyInfo[] propertys = reccordType.GetProperties();

​获取该类型的所有属性,切记,只是属性(就是后面有get;set;),方法是不会获取到的。这可以更好的操作数据。

3 property.GetGetMethod().IsVirtual​

但是由于codefirst的实体类中的虽然都是属性,但是会存在自定义的类型,即为了标识与其他类的关系,比如一本书只属于一个出版社,那么实体类就会有一个出版社的属性,一个出版社有很多书,那么出版社的实体类就有一个属性标识着很多书的集合,但是这些都是反射所不需要的,幸好在创建这些属性时都是设置为virtual(感谢是这么设置的,不然区分都不容易)​,每个属性都有get和set方法(这两个就当作方法,虽然本来就是方法),要区分他们就可以使用property.GetGetMethod().IsVirtual,这个可以获取所有的get方法,获取set方法,当然也是可以的,只要判断他们是虚方法就好了,然后就可以区别他们了。

4 property.GetValue(entity,null);​

该方法是为了获取​某个实体在该属性下的值,就相当与一行记录的某一列的值,可以这么理解吧。

这只是一个小小封装,有什么更好的意见或者方法大家可以自己尝试尝试哦!!​​

泛型加委托在EF下的操作例子的更多相关文章

  1. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  2. Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类

    本文目录 1.  前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...

  3. JVM自定义类加载器加载指定classPath下的所有class及jar

    一.JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器. 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责 ...

  4. 关于有默认值的字段在用EF做插入操作时的思考(续)

    问题描述 今天下午(看现在这时间,应该是昨天下午了哈),园友 choon 写了这样一篇博文<关于有默认值的字段在用EF做插入操作时的思考>. 博文内容主要记录的是 choon 使用 EF ...

  5. 关于有默认值的字段在用EF做插入操作时的思考

    今天在用EF做插入操作的时候发现数据库中一个datetime类型的字段(CreateDate)的值居然全部为null.于是赶紧看表结构发现CreateDate字段居然是允许为空的. 虽然为空,但是设置 ...

  6. EF ( Entity Framework) 操作ArcCataLog 生成的(Sql Server)空间数据库

    因为项目需求,现在需要利用EF 操作由Arccatalog生成的sql server空间数据库..在此之前,一直没有接触过空间数据库,在操作空间数据库时 绕了许多弯... 因此写一篇随笔做一个总结. ...

  7. Android中自定义ListView实现上拉加载更多和下拉刷新

    ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...

  8. 大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配

    第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 ...

  9. 滚动到底部加载更多及下拉刷新listview的使用

    最新内容建议直接访问原文:滚动到底部加载更多及下拉刷新listview的使用 本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用. 该ListView优点包括:a. 可自定义下 ...

随机推荐

  1. 缓冲流自动把getchar()填充

    #include"stdio.h" #include"conio.h" #include<stdlib.h> int main() { char c ...

  2. java初级开发程序员(初识java)

    据我们老师讲说:“学习java高级语言,每个程序员最初写的一个程序就是helloword,向世界打招呼! public class HelloWord{   //必须和文件名相同 public sta ...

  3. jQuery源码学习:Sizzle

    本文所有讨论均基于jQuery版本3.1.1,官网http://jquery.com/. 一 简介 Sizzle是用javascript实现的CSS selector engine,官网见https: ...

  4. Error: Cannot find module 'gulp-clone'问题的解决

    安装完gulp环境,并且配置好gulpfile.js,执行静态文件压缩和代码混淆时,出现如下错误: Error: Cannot find module 'gulp-clone' Error: Cann ...

  5. 从C#到TypeScript - Proxy

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  6. css修炼宝典

    前端岗位目前确实十分火热,但是就业压力也很大:前一段时间与大学同学交谈,他向我哭诉说去一个机构学习了前端工程师,我心底里为他高兴,因为他马上就可以月薪突破10K了,可是不幸的是他说去北京面试一个月,还 ...

  7. Asp.Net MVC 之 Autofac 初步使用3 集成web api

    今天我们试着在WebApi2实现autofac的注入,关于这方面也是看了几位园友的分享省了不少时间,所以结合着前篇的demo再新建webapi进行... 一样开篇还是发下大概demo结构: 还是nug ...

  8. ForEach 循环

    在C 标签里面 有个foreach 标签,这个标签是专门来做循环的标签: <c:forEach items="${wekList}"  var="list" ...

  9. 初探LVS NAT与DR

    1. LB.LVS介绍LB集群是load balance 集群的简写,翻译成中文就是负载均衡集群 LVS是一个实现负载均衡集群的开源软件项目 LVS架构从逻辑上可分为调度层(Director).ser ...

  10. Javaweb之Jsp

    1. JSP是什么? JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%>结束. 2. JSP带 ...