之前有写过两篇,EF选择Mysql数据源 跟 EF添加ADO.NET实体模型处直接选择Oracle数据源,其方便之处就不多说了,使用DBfirst直接点点点就能与数据库双向更新,而且关键是方便我们使用T4,如:

(如果你对T4有个大概认识,只会通过ADO.NET实体模型进行集合遍历,那么可以继续看下去)

  但是现在如果要使用其他数据库,却又苦于找不到像前两者一样的For VS驱动安装(这里表扬下MySQL跟Oracle,良心产品,对我.NET还是很友好的),那么就只能使用codefirst进行EF连接了,但是这样一来,我们不仅多出手动创建一堆Model等的麻烦,而且,关键的我们用于T4的.edmx文件就没了,这可咋整,T4中如何遍历???

  解决办法,我一开始觉得有好几种,无非弄出一个集合来,一开始我想的是通过建个.cs,每个属性名跟Table名一致,去遍历属性,得到Table名集合。遗憾的是我TM怎么也获取不到属性!!!

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ assembly name="E:\编程\C#\T4Test\T4Test\bin\Debug\Model.dll" #>
<#@ output extension=".cs" #>
<#//var ItemCollection = typeof(Assembly).GetProperties();
//var ItemCollection = typeof(Model.ModelTest).GetProperties(); //var ItemCollection = Assembly.Load("T4Test").ExportedTypes.Where(c=>c.FullName == "T4Test.T").FirstOrDefault().GetProperties();
#>

  然后用了一个挫办法,直接文件读取,创建一个.txt文件,逗号分隔多个表名。

  注意:最后一个逗号不要忽略(这是我代码问题,懒得改)

对应的T4:

    

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs" #>
<# string[] ItemCollection = new string[] { "" };
using (StreamReader reader = new StreamReader(@"E:\编程\C#\T4Test\T4Test\txtFile.txt"))//注意这里的文件路径是你硬盘的真实路径,除非你将该txt文件放到T4生成器一致的目录下。也很好理解吧?!
{
string nameStr = reader.ReadToEnd();
int index = nameStr.LastIndexOf(',');
nameStr = nameStr.Substring(, index);
ItemCollection = nameStr.Split(',');
}
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GISER.TMH.IDAL
{ <# foreach(var entity in ItemCollection)
{ #>
public partial interface I<#=entity#>Dal
{
//公共的方法封装到了基接口中
//存放IDal特有的一些方法
//要使用独有的方法,新建该类的partial类或接口来创建,不要在这里创建,容易被更改T4模板后覆盖掉
} <#}#> }

  下面以PostgreSQL为例

  1、新建类库,Nuget下载Npgsql驱动。2.27

  

  2、类库中新建ADO.NET实体模型,选择空Codefirst

打开配置文件,标记2是Nuget驱动的时候自动加上的,标记1需要手动添加,标记3就是你的数据库连接字符串,不多说。

  

  3、打开你的DbContext类,新建你的实体类跟对应的Dbset属性。注意的是红色框选的,改变table对应的“命名空间”,不修改的话,EF生成的sql表名实际上会是dbo.table1,于是就提示table1不存在,很尴尬。熟悉Pg的朋友肯定对public.table1熟悉吧,没错,改成public即可,具体看图。

  4、新建个控制台程序或web客户端,同样要Nuget Pgsql EF2.2.7,跟上面一样,然后配置也一样要修改,重新生成。

测试:

  

目前位置,T4跟Pg的Codefirst都通了,喜欢跟我一样用三层的同学,只需要用T4生成所有的partial类。一切又干净而方便了。

但这里有时候经常改动数据库的话,一个个T4按保存还是好麻烦,有朋友有解决办法请留言哦

就是喜欢用EF,即使指定用Dapper,我也改成EF的使用方式。0 0.(这里有同学可能要说EF这么垃圾,效率低下,啦啦啦~~~咱,不理你)

EFcodeFirst+T4=操纵任意数据库的更多相关文章

  1. JDBC-ODBC桥连接方式操纵SQL数据库

    /**  * 功能:演示使用JDBC-ODBC桥连接方式操纵SQL数据库  * 作者:徐守威  * 操作步骤:  * 1.配置数据源  * 2.在程序中连接数据源  * 3.操作数据  */ pack ...

  2. 第二篇:操纵MySQL数据库(2) - 基于ORM思想的SQLAlchemy库

    前言 本文讲解在Python语言中使用SQLAlchemy库操纵MySQL数据库的方法. 由于具体内容涉及较多,本文仅以插入及展示数据为例,更多内容请查阅有关文档. ORM ORM也即对象 - 关系映 ...

  3. 第一篇:操纵MySQL数据库(1) - 基于MySQLdb库

    前言 本文讲解在Python语言中使用MySQLdb库操纵MySQL数据库的方法. 准备工作 1. 安装Python和MySQL2. 安装MySQLdb (exe下载地址:http://sourcef ...

  4. 通过 NewLife.XCode 迁移任意现有数据库到任意数据库

    通过 NewLife.XCode 迁移任意现有数据库到任意数据库(附分表分库方法) 本文背景是将其他系统的数据库迁移到另一个数据库(仅需 20 行代码),也可以作为项目迁移用,生成自己系统的专属实体代 ...

  5. T4模板根据数据库表和列的Description生成代码的summary的终极解决方案

    相信很多人都用T4模版生成代码,用T4模版生成标准代码真的很方便.我们经常根据表生成相关的代码, 但是估计很多人都遇见过同一个问题, 特别是我们在生成model的时候,代码中model中的Summar ...

  6. pdo操纵mysql数据库

    PDO是mysql数据库操作的一个公用类了,我们不需要进行自定类就可以直接使用pdo来操作数据库了,但是在php默认配置中pdo是未开启所以我们必须先在php.ini中开启它才可以使用,下文我会讲到. ...

  7. 用Java操纵HBase数据库(新建表,插入,删除,查找)

    java代码如下: package db.insert; /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.i ...

  8. EFCodeFirst使用Nuget更新数据库

    在MVC开发中,习惯于使用EF作为数据库操作,相对于传统的Ado.Net的数据库操作方式,EF大大的节省了我们手写SQL语句的时间,即便是传统的使用代码生成的方式.EF操作数据库目前分为两种大的方式. ...

  9. 42.通过原生SQL语句进行操纵mysql数据库

    views.py文件中: from django.shortcuts import render # 导入connection模块 from django.db import connection d ...

随机推荐

  1. Vmware9.0打开早期版本报错:this virtual machine’s policies are too old to be run by this version of vmware workstation”

    VMWare从6.0升级到9.0,打开以前的虚拟机报错如下: “this virtual machine’s policies are too old to be run by this versio ...

  2. 导出Redis某个列表所有数据的语句

     echo "smembers done:www.huaihua.gov.cn" | redis-cli -h 127.0.0.1  >> /home/dz/fkw.d ...

  3. mysql性能监控工具:mycheckpoint的使用方法

    mycheckpoint 是针对mysql的一个性能监控.指标采集的python写成的工具. 工作原理说明: mycheckpoint是一段脚本,通过将其设置为crontab定时任务,每几分钟采集一次 ...

  4. [译] 一、为何要推出AppCoda系列?

    声明:本文翻译自AppCoda网站的文章:Why Launching AppCoda?,作者是创建者Simon Ng.如有异议,请联系博主. 去年九月份,我在App Store上发布了自己第一个iPh ...

  5. Hadoop 生态系统

    1.概述 最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归 ...

  6. asp.net项目在IE11下出现“__doPostBack”未定义的解决办法

    最 近我们运营的网站有用户反馈在 IE 11 下<asp:LinkButton> 点击出现 “__doPostBack”未定义”,经过一番google,终于知道了原因:ASP.NET 可能 ...

  7. android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏

    概述 在很app上都见过 可折叠的顶部导航栏效果.google support v7  提供了 CollapsingToolbarLayout 可以实现这个效果.效果图如下:    实现步骤 1. 写 ...

  8. TokuDB调研文档

    另见链接:http://note.youdao.com/share/?id=77dd1e9cc139b57586665f702467c56a&type=note   安装 安装主要包括两种方法 ...

  9. Python基本语句

    x = 1 y = 1 dataf = 1.0 def fun1(): print("fun1") class ClassB(): def __init__(self): prin ...

  10. MMO之禅(二)职业精神

    MMO之禅(二)职业精神 --心态 目标 信仰 Zephyr 201304 继续上篇,继续讲什么?打了很多腹稿点滴,从引擎架构,到上层数据.逻辑模块规划,想了很多,临起笔,却总发觉四顾心茫然,乱不可言 ...