ASP.NET 에 서 는 익명 류,datatable,sql 에 따라 실체 류 를 생 성 합 니 다.
1.EF 또는 LINQ 에서 조회 한 익명 의 대상 은 다른 곳 에서 사용 하기 불편 하고 게 으 른 수 동 으로 실체 류 를 구축한다.
2.datatable 을 통 해 실 체 를 반사 하려 면 먼저 하나의 유형 을 만들어 야 합 니 다.두통
3.SQL 문 구 를 통 해 돌아 오 는 실체 도 먼저 유형 을 만들어 야 한다.두통
4.코드 생 성 기 를 통 해 모델 을 쓰 려 면 설치 하거나 사용 하지 않 는 클래스 를 만 들 고 싶 지 않 습 니 다.
위의 불편 한 점 을 해결 하기 위해 서 나 는 실체 생 성 류 를 봉 하여 프로그램 에 던 져 서 임의로 호출 할 수 있다.
패키지 종류:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
namespace SyntacticSugar
{
/// <summary>
/// ** :
/// ** :2015-4-17
/// ** :-
/// ** :sunkaixuan
/// ** qq:610262374 , ,
/// </summary>
public class ClassGenerating
{
/// <summary>
///
/// </summary>
/// <param name="entity"> </param>
/// <param name="className"> </param>
/// <returns></returns>
public static string DynamicToClass(object entity, string className)
{
StringBuilder reval = new StringBuilder();
StringBuilder propertiesValue = new StringBuilder();
var propertiesObj = entity.GetType().GetProperties();
string replaceGuid = Guid.NewGuid().ToString();
string nullable = string.Empty;
foreach (var r in propertiesObj)
{
var type = r.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
type = type.GetGenericArguments()[0];
nullable = "?";
}
if (!type.Namespace.Contains("System.Collections.Generic"))
{
propertiesValue.AppendLine();
string typeName = ChangeType(type);
propertiesValue.AppendFormat("public {0}{3} {1} {2}", typeName, r.Name, "{get;set;}", nullable);
propertiesValue.AppendLine();
}
}
reval.AppendFormat(@"
public class {0}{{
{1}
}}
", className, propertiesValue);
return reval.ToString();
}
/// <summary>
/// DataTable
/// </summary>
/// <param name="sql"></param>
/// <param name="className"></param>
/// <returns></returns>
public static string DataTableToClass(DataTable dt, string className)
{
StringBuilder reval = new StringBuilder();
StringBuilder propertiesValue = new StringBuilder();
string replaceGuid = Guid.NewGuid().ToString();
foreach (DataColumn r in dt.Columns)
{
propertiesValue.AppendLine();
string typeName = ChangeType(r.DataType);
propertiesValue.AppendFormat("public {0} {1} {2}", typeName, r.ColumnName, "{get;set;}");
propertiesValue.AppendLine();
}
reval.AppendFormat(@"
public class {0}{{
{1}
}}
", className, propertiesValue);
return reval.ToString();
}
/// <summary>
/// SQL
/// </summary>
/// <param name="sql">SQL </param>
/// <param name="className"> </param>
/// <param name="server"> </param>
/// <param name="database"> </param>
/// <param name="uid"> </param>
/// <param name="pwd"> </param>
/// <returns></returns>
public static string SqlToClass(string sql, string className, string server, string database, string uid, string pwd)
{
using (SqlConnection conn = new SqlConnection(string.Format("server={0};uid={2};pwd={3};database={1}", server, database, uid, pwd)))
{
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandText = sql;
DataTable dt = new DataTable();
SqlDataAdapter sad = new SqlDataAdapter(command);
sad.Fill(dt);
var reval = DataTableToClass(dt, className);
return reval;
}
}
/// <summary>
/// SQL
/// </summary>
/// <param name="sql">SQL </param>
/// <param name="className"> </param>
/// <param name="connName">webconfig connectionStrings name</param>
/// <returns></returns>
public static string SqlToClass(string sql, string className, string connName)
{
string connstr = System.Configuration.ConfigurationManager.ConnectionStrings[connName].ToString();
if (connstr.Contains("metadata"))//ef
connstr = Regex.Match(connstr, @"connection string\=""(.+)""").Groups[1].Value;
using (SqlConnection conn = new SqlConnection(connstr))
{
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandText = sql;
DataTable dt = new DataTable();
SqlDataAdapter sad = new SqlDataAdapter(command);
sad.Fill(dt);
var reval = DataTableToClass(dt, className);
return reval;
}
}
/// <summary>
///
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private static string ChangeType(Type type)
{
string typeName = type.Name;
switch (typeName)
{
case "Int32": typeName = "int"; break;
case "String": typeName = "string"; break;
}
return typeName;
}
}
}
다음 호출:
//
var dynamicObj = new { id = 1, name = " ", entity = new enityt1() };
// : List<T> , List[0]
string classCode = ClassGenerating.DynamicToClass(dynamicObj, "classDynamic");
// datatable
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name");
classCode = ClassGenerating.DataTableToClass(dt, "classTatabale");
// sql
classCode = ClassGenerating.SqlToClass("select * from note", "Note", "127.0.0.1", "MyWork", "sa", "sasa");
classCode = ClassGenerating.SqlToClass("select * from dbo.AccessoriesDetail", "AccessoriesDetail", "NFDEntities");// config connstring
그리고 디 버 깅 상태 에서 필요 한 결 과 를 CTRL+C 로 만 들 고 CTRL+V 를 새로 만 듭 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
부트스트랩 ASP.NET에서 설정하는 법1) _Layout.cshtml 內 link로 bootstrap 참조 2) Nuget 패키지에서 BootStrap 다운로드 3) 하단 부트스트랩 예제 사이트 참고해서 프로젝트 개발 참고 :...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.