Oracle,Mysql,SQlserver生成实体映射之SqlSugarT4
代码已上传GitHub:https://github.com/SeaLee02/sealee
本篇主要讲使用SqlSugar包进行Model生成,不会在乎具体到数据的什么类型映射成什么类型。
环境:.net 4.6.1,Sqlsugar4
问题:我们写代码跑是完全没有问题的,不管是什么数据库,都是可以的。如果我们使用的T4就会有问题,Mysql和Oracle会报错。解决办法,下面说到。
①安装我们的包,注意我的版本,然后生成,让bin文件生成我们的dll文件

PS:T4模板里面的代码你可以在项目中写代码,调试好,然后把代码复制进去

Sqlserver
② 创建T4文件 把下面的代码复制进去

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ assembly name="$(SolutionDir)\Sealee.Util\bin\Debug\Sealee.Util.dll" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="System.Xml.Linq" #>
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="SqlSugar" #>
<#@ import namespace="Newtonsoft.Json" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Web" #>
<#@ import namespace="Sealee.Util" #>
<#@ assembly name="$(SolutionDir)\SqlSugarDemo\bin\Debug\Newtonsoft.Json.dll" #>
<#@ assembly name="$(SolutionDir)\SqlSugarDemo\bin\Debug\SqlSugar.dll" #>
<# //CTRL+S将会执行该文件的代码,自动作生实体 //当前项目目录
string projectDir = Host.ResolveAssemblyReference("$(ProjectDir)"); //解决方案目录
string solutionDir = Host.ResolveAssemblyReference("$(SolutionDir)"); var db = new SqlSugarClient(new ConnectionConfig() {
ConnectionString = @"server=PV-X00273458\SQLEXPRESS;uid=sa;pwd=123;database=SchoolDB",
DbType = DbType.SqlServer,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute}); List<DbTableInfo> list = db.DbMaintenance.GetTableInfoList();
List<DbTableInfo> viewList = db.DbMaintenance.GetViewInfoList();
//表
foreach (DbTableInfo table in list)
{
string table_name = table.Name.ToCase();
db.MappingTables.Add(table_name, table.Name);
List<DbColumnInfo> dd = db.DbMaintenance.GetColumnInfosByTableName(table.Name);
foreach (DbColumnInfo item in dd)
{
db.MappingColumns.Add(item.DbColumnName.ToCase(), item.DbColumnName, table_name);
}
db.DbFirst.IsCreateAttribute().Where(table.Name).CreateClassFile(projectDir+"\\Model2","Modle");
}
//视图
foreach (DbTableInfo table in viewList)
{
string table_name = table.Name.ToCase();
db.MappingTables.Add(table_name, table.Name);
List<DbColumnInfo> dd = db.DbMaintenance.GetColumnInfosByTableName(table.Name);
foreach (DbColumnInfo item in dd)
{
db.MappingColumns.Add(item.DbColumnName.ToCase(), item.DbColumnName, table_name);
}
db.DbFirst.IsCreateAttribute().Where(table.Name).CreateClassFile(projectDir+"\\Model2","Modle");
}
//db.DbFirst.IsCreateAttribute().CreateClassFile(projectDir+"\\Model","Modle"); #>
注:我在头部引用了这个dll文件和命名空间,其实就是一个方法,用来处理我们的表明和字段的

你也可以写在T4里面,然后进行调用(我是写在代码中的,这里就需要引用)
/// <summary>
/// 字符串处理 (_切分,首字母大写 (.)去除 ) ----》 扩展方法
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static string ToCase(this string value)
{
if (string.IsNullOrEmpty(value))
{
return string.Empty;
}
string[] arry = value.Split('_');
string str = "";
foreach (string item in arry)
{
string newstr = item.Replace("(", "").Replace(".", "").Replace(")", "");
string firstLetter = newstr.Substring(, );
string rest = newstr.Substring(, newstr.Length - );
str += firstLetter.ToUpper() + rest.ToLower();
}
return str;
}
注意这里的连接,换成你的就可以了:

③右键运行自定义工具

然后查看我们的项目,多了一个Model2文件夹,这个文件夹是不在我们的项目中的,你需要手动添加到我们的项目中



对应的我们的数据库表:

Mysql
mysql的T4模板中我们只加了个dll和改变了连接方式其余的都没有变,然后就会提示我们dll没有引用,如果我们调试T4模板,他就会在new SqlSugarClient的时候出错



Oracle
Oracle的错误跟Mysql是一毛一样的。



*我们的目录下一定是存在这个dll文件的。

解决办法:
https://github.com/sunkaixuan/SqlSugar git上面下载他的源码


他的这两个dll跟我们现在引用的不是同一个版本。
打开项目,我们需要把SqlSuagr从新生成一下,然后进行引用试试

①改变框架,跟你现在创建的项目保持一致

②先删除他原来的这个两个dll引用,然后从我们的nuget上下载最新的,然后从新生成得到我们最新的SqlSugar.dll文件



③回到我们的项目,进行卸载sqlSugar,然后引用我们生成的sqlSugar.dll,然后从新生成

④打开我们的MysqlT4模板,运行

然后并没有保存,再查看我们的项目,生成成功

对于有些关键字还是会没有映射到,因为我们这里的名字和数据库的名字不一致,所以所有的字段必须映射,我们需要手动添加一下(看后面能不能把这个bug解决了)
using System;
using System.Linq;
using System.Text;
using SqlSugar; namespace ModleMysql
{
///<summary>
///
///</summary>
[SugarTable("datatestinfo2")]
public partial class Datatestinfo2
{
public Datatestinfo2(){ }
/// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
[SugarColumn(ColumnName="PK")]
public string Pk {get;set;} /// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public string Text1 {get;set;} /// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public bool Bool1 {get;set;} /// <summary>
/// Desc:
/// Default:
/// Nullable:False
/// </summary>
public bool Bool2 {get;set;} }
}
⑤运行我们的OracleT4模板(靠,我在公司跑就报错,在家跑就正常??)

ps:如果你重新引用了,还是报同样的错误,请把项目重启,如果还是报错,就执行调试T4模板进行跑项目(调试一定是不会报错的)

值得一提:我们下载的Sqlsugar项目是可以进行修改的:根据你的需要进行修改,然后生成

Oracle,Mysql,SQlserver生成实体映射之SqlSugarT4的更多相关文章
- VS2015 +EF6 连接MYSQL数据库生成实体
VS2015 +EF6 连接MYSQL数据库生成实体 已安装软件:VS2015 XAMPP Control Panel(Mysql服务器) ...
- Oracle/Mysql/SqlServer函数区别
mysql日期和时间格式转换 Linux scp 使用详解 Oracle/Mysql/SqlServer函数区别 2011-07-01 12:34:36| 分类: Mysql技术 | 标签:mys ...
- MySQL一键生成实体文件的神器-ginbro
Java转过来的同学对Mybatis的使用肯定不陌生,特别是对一堆表去生成相应的dao和entity的时候使用Mybatis generator所带来的感触,无比深刻.前面我们也讲过原生的数据库使用, ...
- oracle,mysql,SqlServer三种数据库的分页查询的实例。
MySql: MySQL数据库实现分页比较简单,提供了 LIMIT函数.一般只需要直接写到sql语句后面就行了.LIMIT子 句可以用来限制由SELECT语句返回过来的数据数量,它有一个或两个参数,如 ...
- oracle mysql sqlserver数据库中的分页
oracle: select * from (select rownum r,t1.* from tablename t1 where rownum <M+N ) t2 where t2.r&g ...
- 数据库:oracle,MySQL,SqlServer 安装资源分享
1. oracle 11g: 链接:http://pan.baidu.com/s/1bppaqR1 密码:http 2. mysql 链接:http://pan.baidu.com/s/1jH8O ...
- db2,oracle,mysql ,sqlserver限制返回的行数
不同数据库限制返回的行数的关键字如下: ①db2 select * from table fetch first 10 rows only; ②oracle select * from table w ...
- sql server 在作业中 远程连接 oracle mysql sqlserver 数据库
在作业中执行远程连接时,需要对本次作业执行的步骤指定特定用户 并且该用户必须拥有所需操作数据库的db_owner角色,和服务器sysadmin角色 在作业中执行远程连接时,需要做登录映射 下面是我在作 ...
- oracle mysql sqlserver 基本操作命令
1.oracle (1) 启动 监听 lsnrctl start: (2)进入sqlplus界面 sqlplus /nolog SQL>conn sys/jiaxiaoai@orcl as s ...
随机推荐
- [ElasticSearch] 如何使用中文分詞ik與繁簡轉換stconvert插件
一. 環境安裝 ElasticSearch(以下簡稱ES)安裝已經算相對簡單了, 但要使用需要配置的插件, 對剛入門的新手還是有點麻煩, 所幸medcl大神提供一個配置好的ES-rtf版本, 新手們在 ...
- Where Should an Architect Begin?--reference
http://www.bitnative.com/2014/01/24/where-should-a-software-architect-begin/ Where Should an Archite ...
- VS 连接数据库报错:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
VS报错:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider ...
- 从函数作用域和块级作用域看javascript的作用域链
在ES6之前,javascript只有全局作用域和函数作用域.所谓作用域就是一个变量定义并能够被访问到的范围.也就是说如果一个变量定义在全局(window)上,那么在任何地方都能访问到这个变量,如果这 ...
- spring-boot 1.4.x遇到的cpu高的问题
如果你的spring-boot应用里tomcat线程耗cpu较高,并主要耗在做读取jar的操作上(堆栈类似下面),可能跟我们遇到同样的问题. CRC32.update(byte[], int, int ...
- spring+springmvc+hibernate整合遇到的问题
spring+springmvc+hibernate整合遇到的问题2016年10月20日 23:24:03 守望dfdfdf 阅读数:702 标签: ssh学习经历的异常exception异常框架更多 ...
- 数组和矩阵(2)——Reshape the Matrix
In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new o ...
- 《ArcGIS Runtime SDK for Android开发笔记》——问题集:Error:Error: File path too long on Windows, keep below 240 characters
1.前言 在使用Android Studio开发环境时,经常会爆出以下错误,虽然具体细节内容各有不同,但是说明的都是同一个问题,在windows中使用过长的路径,超过240字符. Error:Erro ...
- SQL获取本周,上周,本月,上月的开始时间和结束时间
),),--本周 ),),--上周 ),),--本月 ),),--上月 ),),--近半年 ),)--近一年 ), ,, ),)--本周开始时间 ), ,, ),)--本周结束时间 ),,, ),)- ...
- JavaScript获取当前网页的源码
通过 outerHTML document.documentElement.outerHTML 通过异步请求 $.get(window.location.href,function(res){ con ...