gpt4 book ai didi

c# - 转换T4模板以连接MySQL数据库?

转载 作者:行者123 更新时间:2023-11-29 22:51:05 27 4
gpt4 key购买 nike

我发现了以下T4 Templatehttp://www.haneycodes.net/automatically-generate-pocos-from-db-with-t4/连接到 SqlServer database and generates POCO classes from the tables 。我想对 MySql 做同样的事情,但我不确定我需要改变什么。我尝试仅使用 MySqlConnection 连接,但这不起作用。我必须创建 MySql Server 实例吗?如果有人知道使用 MySQL 创建 POCO 的替代方案,我也对此持开放态度。

<#@ template language="C#" hostspecific="true" debug="True" #> 
<#@ assembly name="System.Core" #> <#@ assembly name="System.Data" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="Microsoft.SqlServer.Smo" #>
<#@ assembly name="Microsoft.SqlServer.ConnectionInfo" #>
<#@ assembly name="Microsoft.SqlServer.Management.Sdk.Sfc" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="Microsoft.SqlServer.Management.Smo" #>
<#

string sqlServer = "9.9.9.9";
string sqlLogin = "admin";
string sqlPassword = "password";
string sqlDatabase = "MyDatabase";
string classNamespace = "Your.Namespace.Here";
string destinationFolder = "PocoFolder";


Server server = new Server(sqlServer);
server.ConnectionContext.LoginSecure = false;
server.ConnectionContext.Login = sqlLogin;
server.ConnectionContext.Password = sqlPassword;
server.ConnectionContext.Connect();

foreach (Table table in server.Databases[sqlDatabase].Tables)
{

if (table.Name.StartsWith("sys"))
{
continue;

} #>

using System;

namespace <#= classNamespace #>
{

public class <#= table.Name #>
{ <#
int columnCount = table.Columns.Count;
int i = 0;
foreach (Column col in table.Columns)
{
i++;
string propertyType = GetNetDataType(col.DataType.Name);
// If we can't map it, skip it
if (string.IsNullOrWhiteSpace(propertyType))
{
// Skip
continue;
}
// Handle nullable columns by making the type nullable
if (col.Nullable && propertyType != "string")
{
propertyType += "?";
} #>
public <#= propertyType #> <#= col.Name #> { get; set; } <#
// Do we insert the space?
if (i != columnCount)
{ #> <#
} #> <#
} #>
}
}
<#
// Write new POCO class to its own file
SaveOutput(table.Name + ".cs", destinationFolder);
} #>
<#+
public static string GetNetDataType(string sqlDataTypeName)
{ switch (sqlDataTypeName.ToLower())
{
case "bigint":
return "Int64";
case "binary":
case "image":
case "varbinary":
return "byte[]";
case "bit":
return "bool";
case "char":
return "char";
case "datetime":
case "smalldatetime":
return "DateTime";
case "decimal":
case "money":
case "numeric":
return "decimal";
case "float":
return "double";
case "int":
return "int";
case "nchar":
case "nvarchar":
case "text":
case "varchar":
case "xml":
return "string";
case "real":
return "single";
case "smallint":
return "Int16";
case "tinyint":
return "byte";
case "uniqueidentifier":
return "Guid";
default:
return null;
}
}

void SaveOutput(string outputFileName, string destinationFolder)
{
// Write to destination folder
string templateDirectory = Path.Combine(Path.GetDirectoryName(Host.TemplateFile), destinationFolder); string outputFilePath = Path.Combine(templateDirectory, outputFileName);
File.Delete(outputFilePath);
File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString());
// Flush generation
this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
} #>

最佳答案

我使用了db schema reader project在我的 VS 扩展 ( T4 Awesome ) 中访问数据库结构。它支持任何 ADO 提供程序。您可以下载MySql提供程序here 。数据库模式阅读器项目的文档非常好,因此您应该能够使用它们来弄清楚如何连接到数据库并读取结构。

正如我所说,我在扩展中实现了这一点,因此如果您想要快速解决方案,您可以 download it并尝试一下。如果没有,您几乎可以按照已有的方式进行操作,但引用数据库模式读取器项目 namespace 和程序集。

关于c# - 转换T4模板以连接MySQL数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28902388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com