实体生成

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ Assembly Name="$(ProjectDir)\MySql.Data.dll" #>
<#@ Assembly Name="System.Data" #>
<#@ Assembly Name="System" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="MySql.Data" #>
<#@ import namespace="MySql.Data.MySqlClient" #>

<#

    string Db_Name="repairsystem",Table_Name="stock_infolist";
    string conStr="server=localhost;database=repairsystem;uid=root;pwd=root";
    MySqlConnection con=new MySqlConnection(conStr);
    con.Open();
    MySqlParameter mp1=new MySqlParameter("@db_name",Db_Name);
    MySqlParameter mp2=new MySqlParameter("@table_name",Table_Name);
    string sqlStr="select * from information_schema.COLUMNS where [email protected]_name ";//and [email protected]_name";
    MySqlCommand cmd=new MySqlCommand(sqlStr,con);
    cmd.Parameters.Add(mp1);
    cmd.Parameters.Add(mp2);
    MySqlDataReader dr = cmd.ExecuteReader();

#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@  include file="Base.tt" #>
<#
    var TableList=new List<string>();
    var DetailList=new List<Tuple<string,string,string>>();
    var TableName="";
    while(dr.Read())
    {
        var Table=dr["TABLE_NAME"].ToString();
        if(TableName==Table)
        {
            var Column=dr["COLUMN_NAME"].ToString();
            var DataTypeOld=dr["DATA_TYPE"].ToString();
            var DataType=DataTypeOld=="varchar"?"string":
                (DataTypeOld=="int"?"int":
                (DataTypeOld=="datetime"?"DateTime":
                (DataTypeOld=="decimal"?"decimal":
                (DataTypeOld=="char"?"string":
                (DataTypeOld=="bit"?"Boolean":"string")))));
            DetailList.Add(Tuple.Create(Table,DataType,Column));
        }
        else
        {
            TableList.Add(Table);
        }
        TableName=Table;
    }
#>
namespace DataBaseEntity
{
<# foreach(var item in TableList) { #>
    public class <#= item #>
    {<# foreach(var detail in DetailList) {if( item == detail.Item1 ) { #>
        public <#=detail.Item2#> <#=detail.Item3#> { get; set; }
<#}}#>    }
<# } #>}
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ include file="Base.tt" #> 

<#
    var TableInfo="";
    List<Tuple<string,string>> list=new List<Tuple<string,string>>();
    while(dr.Read())
    {
        var TableName=dr["table_name"].ToString();
        if(TableName==TableInfo)
        {
            var Column=dr["column_name"].ToString();
            var DataType=dr["data_type"].ToString();
            switch(DataType)
            {
                case "varchar":DataType="string";
                    break;
                case "int":DataType="int";
                    break;
                case "datetime":DataType="DateTime";
                    break;
                case "decimal":DataType="decimal";
                    break;
                case "char":DataType="string";
                    break;
                case "double":DataType="double";
                    break;
                case "float":DataType="float";
                    break;
                case "bit":DataType="Boolean";
                    break;
                default:DataType="string";
                    break;
            }
            list.Add(Tuple.Create(Column,DataType));
        }
        TableInfo=TableName;
    }
#>
// This is the output code from your template
// you only get syntax-highlighting here - not intellisense

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dapper;
using System.Data;

namespace MyNameSpace
{
    class <#= TableInfo #>
    {
    <#
    foreach(var item in list)
    {
    #>
    public <#= item.Item2 #> <#= item.Item1 #> { get ; set ; }
    <#
    }
    #>
}
}
 
时间: 2024-10-07 02:59:03

实体生成的相关文章

VS中根据实体生成数据库

   .edmx 文件是一个 XML 文件,它用于定义概念模型.存储模型和这些模型之间的映射. .edmx 文件还包含 ADO.NET 实体数据模型设计器(实体设计器)用于以图形方式呈现模型的信息..edmx文件可以理解成为是一种实体数据模型工具.今天我就是要使用edmx文件在SQL中生成一个数据库. 1,先看一张图,图中我用红线标出来的edmx文件打开就是下一张图. 请看: 我就是要使用这些实体生成数据库. 2,右击--"根据模型生成数据库"--"上一步" 接

SharePoint的实体生成

生成Linq实体 使用SPMetal工具生成Linq to SharePoint实体 工具安装目录: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN\SPMETAL.exe 命令参数: cmd: cdC:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN 生成 C# 代码: //10.250.201

Hibernate实体生成JSON的问题及解决

1.延迟加载所造成的代理对象无法正常序列化的问题 在实体类上添加注解: @JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" }) 2.双向关联的对象生成JSON的无限循环问题 2.1 两个引用方向都需要生成JSON的情况 引入jackson-jsog库: 在实体类上添加注解: @JsonIdentityInfo(generator = JSOGGenerator.class) ; 客户端引入JS

三、T4模板与实体生成

     上文我们最后虽然用模板创建了一个实体类,但是类的内容仍旧是静态的,这里我们需要用动态方式生成类的内容.因为需要查询数据库这里又免不了各种繁琐的连接数据库操作,为了使我们的编码更加直观,仍然采用C#编码习惯来书写T4代码.      在JSP中,我们可以使用include标签来包含另一个JSP文件.在T4模板中也可以在一个模板文件中包含另一个模板文件.所以我们尽可能把公共模块的代码提取到一个T4模板文件中,方便重复使用.包含指令如下: <#@ include file="$(Pro

EF实体生成关系导致相互循环取数据出现异常&quot;Self referencing loop detected for property &quot;

异常信息: Self referencing loop detected for property 'md_agent' with type 'System.Data.Entity.DynamicProxies.md_agent_5F7CB7C257B9164D0D18D2B3E8DA3838A3ED1C7F5D326A56B71D51234B89C401'. Path '[1].md_design[0]'. at Newtonsoft.Json.Serialization.JsonSerial

如何让vs2017 EF实体生成支持Mysql 和 Oracle?

1.Mysql 安装   MySql Connector/Net        https://dev.mysql.com/downloads/connector/net/ 安装    mysql for visualstudio         https://dev.mysql.com/downloads/windows/visualstudio/ 安装时entity framwork相关的选项一定要选. 如果还不行的话执行一下 .\devenv.exe /setup 项目中 添加最新版本M

如何通过java反射将数据库表生成实体类?

首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有所启发. //这个是做转换的类,里面的DB只是封装了数据库的连接,大家可以用自己的,随意 package com.tt.util.gen.entity.tool; import java.io.File;import java.io.FileWriter;import java.io.IOExcep

七色花基本权限系统(5)- 实体配置的使用和利用T4自动生成实体配置

在前面的章节里,用户表的结构非常简单,没有控制如何映射到数据库.通常,需要对字段的长度.是否可为空甚至特定数据类型进行设置,因为EntityFramework的默认映射规则相对而言比较简单和通用.在这篇日志里,将演示如何对数据实体进行映射配置,并利用T4模板自动创建映射配置类文件. 配置方式 EntityFramework的实体映射配置有2种. 第一种是直接在实体类中以特性的方式进行控制,这些特性有部分是EF实现的,也有部分是非EF实现的.也就是说,在数据实体层不引用EF的情况下,只能使用不全的

.net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要先建一个类 ,头痛 4.如果通过代码生成器要写模版,需要安装或者不想生成一堆不用的类 为了解决上面的不便之处,我封装了一个实体生成类,可以扔到程序里面任意调用 封装类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25