• T4 Generate POCO Class for MSSQ


    <#@ template debug="false" hostspecific="true" language="C#" #>
    <#@ assembly name="System.Core" #>
    <#@ assembly name="System.Xml" #>
    <#@ assembly name="System.IO" #>
    <#@ assembly name="System.Data" #>
    <#@ assembly name="System.Configuration" #>
    <#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
    <#@ assembly name="Microsoft.SqlServer.Smo" #>
    <#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
    
    <#@ import namespace="System.Linq" #>
    <#@ import namespace="System.Text" #>
    <#@ import namespace="System.IO" #>
    <#@ import namespace="System.Data" #>
    <#@ import namespace="System.Data.SqlClient" #>
    <#@ import namespace="System.Configuration" #>
    <#@ import namespace="System.Collections.Generic" #>
    <#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
    <#@ import namespace="Microsoft.SqlServer.Management.Common" #>
    
    <#@ output extension=".cs" #>
    
    <#
    string appConfig = this.Host.ResolvePath("App.config");
    if(!File.Exists(appConfig))
    {
        Error("App.config not exists");
    }
    
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
    configFile.ExeConfigFilename = appConfig;
    var configuration = ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None);
    var connectionString = configuration.ConnectionStrings.ConnectionStrings["Default"].ConnectionString;
    SqlConnection sqlConnection = new SqlConnection(connectionString);
    ServerConnection serverConnection = new ServerConnection(sqlConnection);
    Server server = new Server(serverConnection);
    var tables = server.Databases[server.ConnectionContext.DatabaseName].Tables;
    #>
    namespace <#= server.ConnectionContext.DatabaseName #>.Entities
    {
    <#
    foreach(Table table in tables)
    {
    #>
    public sealed partial class <#= FixTableName(table.Name) #>
    {
    <#
    foreach(Column column in table.Columns)
    {
    #>
        public <#= ToClrType(column.DataType, column.Nullable) #> <#= FixTableName(column.Name) #> { get; set; }
    <#
    }
    #>
    }
    <#
    }
    #>
    }
    <#+ 
    private string FixTableName(string tableName)
    {
        var result = tableName.Replace(" ","_");
        return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(result);
    }
    
    private string ToClrType(DataType dataType, bool isNullable)
    {
        string returnType = string.Empty;
        switch (dataType.SqlDataType)
        {
            case SqlDataType.BigInt:
                returnType = string.Format("{0}{1}","long", isNullable ? "?":"");
                break;
            case SqlDataType.Binary:
            case SqlDataType.Image:
            case SqlDataType.Timestamp:
            case SqlDataType.VarBinary:
                returnType = "byte[]";
                break;
            case SqlDataType.Bit:
                returnType = string.Format("{0}{1}","bool", isNullable ? "?":"");
                break;
            case SqlDataType.Char:
            case SqlDataType.NChar:
            case SqlDataType.NText:
            case SqlDataType.NVarChar:
            case SqlDataType.Text:
            case SqlDataType.VarChar:
            case SqlDataType.Xml:
                returnType = string.Format("{0}{1}","string", "");
                break;
            case SqlDataType.DateTime:
            case SqlDataType.SmallDateTime:
            case SqlDataType.Date:
            case SqlDataType.Time:
            case SqlDataType.DateTime2:
                returnType = string.Format("{0}{1}","System.DateTime", isNullable ? "?":"");
                break;
            case SqlDataType.Decimal:
            case SqlDataType.Money:
            case SqlDataType.SmallMoney:
                returnType = string.Format("{0}{1}","decimal", isNullable ? "?":"");
                break;
            case SqlDataType.Float:
                returnType = string.Format("{0}{1}","double", isNullable ? "?":"");
                break;
            case SqlDataType.Int:
                returnType = string.Format("{0}{1}","int", isNullable ? "?":"");
                break;
            case SqlDataType.Real:
                returnType = string.Format("{0}{1}","float", isNullable ? "?":"");
                break;
            case SqlDataType.UniqueIdentifier:
                returnType = string.Format("{0}{1}","Guid", isNullable ? "?":"");
                break;
            case SqlDataType.SmallInt:
                returnType = string.Format("{0}{1}","short", isNullable ? "?":"");
                break;
            case SqlDataType.TinyInt:
                returnType = string.Format("{0}{1}","byte", isNullable ? "?":"");
                break;
            case SqlDataType.Variant:
                returnType = string.Format("{0}{1}","object", "");
                break;
            case SqlDataType.DateTimeOffset:
                returnType = string.Format("{0}{1}","DateTimeOffset", isNullable ? "?":"");
                break;
            }
    
            return returnType;
    }
    #>
  • 相关阅读:
    Spring Boot 打包插件,真是太有用了!
    java高级应用:线程池全面解析
    漫画:HTTP 协议极简教程,傻瓜都能看懂!
    Tomcat 连接数与线程池详解
    Intellij IDEA Debug 调试技巧
    Java 程序员必须掌握的 5 个注解!
    如何优雅地终止一个线程?
    springmvc实现REST中的GET、POST、PUT和DELETE
    @Resource 和 @Autowired注解的异同
    SpringMVC的各种参数绑定方式
  • 原文地址:https://www.cnblogs.com/valeb/p/14197380.html
Copyright © 2020-2023  润新知