泛型加委托在EF下的操作例子
接下来放一个用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下的操作例子的更多相关文章
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类
本文目录 1. 前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...
- JVM自定义类加载器加载指定classPath下的所有class及jar
一.JVM中的类加载器类型 从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器. 1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责 ...
- 关于有默认值的字段在用EF做插入操作时的思考(续)
问题描述 今天下午(看现在这时间,应该是昨天下午了哈),园友 choon 写了这样一篇博文<关于有默认值的字段在用EF做插入操作时的思考>. 博文内容主要记录的是 choon 使用 EF ...
- 关于有默认值的字段在用EF做插入操作时的思考
今天在用EF做插入操作的时候发现数据库中一个datetime类型的字段(CreateDate)的值居然全部为null.于是赶紧看表结构发现CreateDate字段居然是允许为空的. 虽然为空,但是设置 ...
- EF ( Entity Framework) 操作ArcCataLog 生成的(Sql Server)空间数据库
因为项目需求,现在需要利用EF 操作由Arccatalog生成的sql server空间数据库..在此之前,一直没有接触过空间数据库,在操作空间数据库时 绕了许多弯... 因此写一篇随笔做一个总结. ...
- Android中自定义ListView实现上拉加载更多和下拉刷新
ListView是Android中一个功能强大而且很常用的控件,在很多App中都有ListView的下拉刷新数据和上拉加载更多这个功能.这里我就简单记录一下实现过程. 实现这个功能的方法不止一个,Gi ...
- 大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配
第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 ...
- 滚动到底部加载更多及下拉刷新listview的使用
最新内容建议直接访问原文:滚动到底部加载更多及下拉刷新listview的使用 本文主要介绍可同时实现下拉刷新及滑动到底部加载更多的ListView的使用. 该ListView优点包括:a. 可自定义下 ...
随机推荐
- asyncio
一.简介 asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接获取一个EventLoop的引用, ...
- git合并别的分支某次提交或合并
合并别的分支某次提交 master分支上改了一个bug.提交到master分支.现在在dev分支上开发,需要把master分支上改的那个bug合过来.步骤是:先在master分支上查改那个bug的SH ...
- springmvc 获取request 和 java路径分隔符 在windows 和linux 下自动判断的方法
//获取requert HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestA ...
- vsftp之虚拟用户
1.安装: yum install -y vsftpd yum install -y lftp2.创建用户useradd virftp -s /sbin/nologin3.创建虚拟用户及其存放路径vi ...
- angular : direative : scope | 指令scope里的符号@,=
先看看以下的代码 <body ng-app="app" ng-controller="ctrl"> <dir myname="nam ...
- fastcgi的介绍,原理及配置
fastcgi介绍: CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序一般运行在网络服务器上. C ...
- jpush 延迟推送的栗子
这个 推送是上个月做的, 上线之后没有问题,所以,我就把 这个整套代码 整理一哈,方便以后使用. 首先需求是这样的: 在比赛结束后的 10 钟 开始给 参加比赛的球员 发送消息,告诉他们比赛的信息 ...
- 跨专业学习编程的苦逼生活 QWQ嘤嘤嘤
一串串小小的代码,竟然可以做出辣么多的东西,彻底颠覆了我的世界观.人生观.价值观. 话不多说,一个例子证明一切>>>> <!DOCTYPE html> <ht ...
- ACM 组合数
组合数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 找出从自然数1.2.... .n(0<n<10)中任取r(0<r<=n)个数的所有组合 ...
- docker X509 证书错误的终极解决办法
最近在做Docker相关的东西,发现只要一pull镜像,就出现如下的ERROR x509: certificate signed by unknown authority. 调查后发现,是公司IT把h ...