초용 T4
3907 단어 TextTemplateT4.Net 기본 사항
간단하게 보면 데이터의 표를 대응하는 실체 클래스로 만들고 프로젝트에 '실행할 때 텍스트 템플릿' 을 만듭니다. 확장자는 다음과 같습니다.tt,사실.tt의 코드가 표준 C# 코드인 경우tt는 디자인할 때 생성할 수 있습니다.cs 파일은 런타임에 생성할 수도 있습니다. 이 예는 디자인 타임에 생성되며 코드는 다음과 같습니다.
!
";
xmlDoc.Save(Host.ResolveAssemblyReference("$(ProjectDir)")+@"\"+proName);
}
}
//
public void WriteFile(string className,string content)
{
var writer = new System.IO.StreamWriter(Host.ResolveAssemblyReference("$(ProjectDir)")+@"\"+className + ".cs", false, Encoding.Default);
writer.Write(content);
writer.Flush();
writer.Close();
}
//
public Dictionary BuildClass(string constr)
{
using (var con = new System.Data.SqlClient.SqlConnection(constr))
{
var cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandText = "select name from sys.tables WHERE name!='sysdiagrams' AND name!='__MigrationHistory'";
cmd.Connection = con;
con.Open();
var dr = cmd.ExecuteReader();
var dt = new DataTable();
dt.Load(dr);
dr.Close();
var dic =new Dictionary();
foreach (DataRow row in dt.Rows)
{
cmd.CommandText = string.Format(@"select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE
from information_schema.columns WHERE TABLE_NAME = '{0}'", row["name"].ToString());
var fielddr = cmd.ExecuteReader();
var fieldTable = new DataTable();
fieldTable.Load(fielddr);
fielddr.Close();
dic.Add(row["name"].ToString(), CreateClass(row["name"].ToString(), fieldTable));
}
return dic;
}
}
public string CreateClass(string className, DataTable fields)
{
var csBuilder = new StringBuilder("\r
");
csBuilder.AppendLine(string.Format(@" public class {0}", className));
csBuilder.AppendLine(@" {");
foreach (DataRow row in fields.Rows)
{
csBuilder.AppendLine(CreateProperty(row));
}
csBuilder.AppendLine(@" }");
return csBuilder.ToString();
}
//
public string CreateProperty(DataRow row)
{
var dic = new Dictionary();
dic.Add("nvarchar", "string");
dic.Add("varchar", "string");
dic.Add("char", "string");
dic.Add("text", "string");
dic.Add("int", "string");
dic.Add("money", "decimal");
dic.Add("float", "float");
dic.Add("bit", "bool");
var csBuilder = new StringBuilder();
csBuilder.AppendLine(string.Format(@" public {0} {1}", dic[row["DATA_TYPE"].ToString().ToLower()], row["COLUMN_NAME"].ToString()));
csBuilder.AppendLine(@" {");
csBuilder.AppendLine(string.Format(@" get;"));
csBuilder.AppendLine(string.Format(@" set;"));
csBuilder.AppendLine(@" }");
return csBuilder.ToString();
}
#>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
초용 T4개발 과정에서 우리는 싱크로율이 높은 코드를 많이 쓴다. 이런 코드를 쓰는 것은 규칙적이다. 예를 들어 우리는 데이터 테이블에 따라 실체 클래스를 생성한다.EF처럼 테이블에서 실체 클래스를 자동으로 생성한다. 만약에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.