Tengo varias tablas en mi Servidor de Explorar el archivo de base de datos. Quiero generar automáticamente el código de las Clases para las tablas, de modo que todas las clases con sus atributos, constructor de métodos setter y getter generar automáticamente.

Favor decirme los pasos para hacerlo.

Hay varias maneras de «generar código», dependiendo de lo que el código que se desea generar. ¿Quieres usar el antiguo conjunto de datos de la tecnología, o la más reciente «Entity Framework»?
¿Quieres usar Entity Framework?

OriginalEl autor m3nhaq | 2011-10-22

5 Comentarios

  1. 5

    No autogenerar, pero no es difícil de usar sql y information_schema a la salida de una definición de clase, con el nombre de la clase después de la tabla y las columnas que se mappped a las propiedades. Desde allí se puede genere crear, actualizaciones y eliminaciones (me gusta el uso de combinación de caja/actualizaciones de SQL Server 2008).

    Hacer de una en una y principalmente cadena concatination. El de abajo debe empezar….

    declare @class varchar(max);
    
    ; with typemapping as (
     Select 'varchar' as DATA_TYPE, 'string' ctype
     union
     Select 'int', 'int'
    )
    select @class = isnull(@class + char(10), '') + 'public ' +
           tm.ctype +' ' + column_name +
           ' { get; set; }'
    from information_schema.columns sc
       inner join typemapping tm on sc.data_type = tm.data_type
    where table _name ='yourtbl'
    
    print @class;

    El resto se deja como ejercicio para el lector como dicen principalmente porque los detalles son de usted, en lugar de auto de propiedades usted puede utilizar la copia de las variables, puesto lógica estándar en las propiedades, hacen que el valor de los tipos que aceptan valores null, al hacer su propio generador de código, que se ajuste a tus patrones/estilos/necesidades.

    OriginalEl autor jmoreno

  2. 1

    usted podría intentar algo como esto…

    Crear una clase principal con el nombre de ModelCreator.cs que hace todas las operaciones de tecla. Punto de entrada para esta aplicación es la de Conectar y Crear evento de clic de botón. Se lanzará una CreateConnectionString() método, que, básicamente, se obtiene la entrada del usuario y crea dinámicamente la cadena de conexión

    private void lbtnConnect_Click(object sender, System.EventArgs e)
    {
       if (CreateConnectionString())
      CreateModelClassFiles(tcGetDataReader());
    }
    
    //<summary>
    ///Get the SqlDataReader object
    ///SqlDataReader
    ///</summary>
    
    public SqlDataReader tcGetDataReader()
    {
    SqlConnection connection = null;
    try
    {
      connection = GetConnection(SQL_CONN_STRING);
      if (connection == null)
      return null;
      SqlDataReader dr = SqlHelper.ExecuteReader(
             connection,
             CommandType.StoredProcedure,
             "getData");
    if (dr.HasRows)
      return dr;
    else
      return null;
     }
     catch(Exception ex)
     {
      MessageBox.Show(ex.Message);
      return null;
     }   
    }

    Obtener los Nombres de las tablas, Atributos y sus tipos de la base de datos

     CREATE PROCEDURE getData AS 
     select table_name, column_name, data_type
      from information_schema.columns
      where table_name in
      (
       select table_name
       from Information_Schema.Tables
       where Table_Type='Base Table'
      ) order by table_name
    GO

    Método Main, CreateModelClassFiles

      ///<summary>
    ///Create the Model class list iterating through the tables
    ///</summary>
    ///<param name="dr">Sql Data reader for the database schema</param>
    private void CreateModelClassFiles(SqlDataReader dr)
    {
    if (dr != null)
    {
    string lstrOldTableName = string.Empty;
    StreamWriter sw = null;
    System.Text.StringBuilder sb = null;
    System.Text.StringBuilder sbAttr = null;
    while(dr.Read())
    {
    string lstrTableName = dr.GetString(0);
    string lstrAttributeName = dr.GetString(1);
    string lstrAttributeType = GetSystemType(dr.GetString(2));
    if (lstrOldTableName != lstrTableName)
    {
    if (sw != null)
    {
    this.CreateClassBottom(sw, sb.ToString().TrimEnd(
    new char[]{',', ' ', '\r', '\t', '\n'}),
    sbAttr.ToString());
    sw.Close();
    }
    sb = new System.Text.StringBuilder(lstrTableName);
    sb.Append(".cs");
    FileInfo lobjFileInfo = new FileInfo(sb.ToString());
    sw = lobjFileInfo.CreateText();
    this.CreateClassTop(sw, lstrTableName);
    sb = new System.Text.StringBuilder("\r\n\t///\r\n\t" + 
    "///User defined Contructor\r\n\t///\r\n\tpublic ");
    sbAttr = new System.Text.StringBuilder();
    sb.Append(lstrTableName);
    sb.Append("(");
    }
    else
    {
    this.CreateClassBody(sw, lstrAttributeType, lstrAttributeName);
    sb.AppendFormat("{0} {1}, \r\n\t\t", 
    new object[]{lstrAttributeType, lstrAttributeName});
    sbAttr.AppendFormat("\r\n\t\tthis._{0} = {0};", 
    new object[]{lstrAttributeName});
    }
    lstrOldTableName = lstrTableName;
    this.progressBarMain.Increment(1); 
    }
    MessageBox.Show("Done !!");
    }
    }

    Una vez que se llama a este método, se hace cada cosa para usted.

    espero que os sirve de ayuda….

    Hola, por favor, Puedes poner el código de cualquier CreateClassBottom,CreateClassTop o CreateClassBody?
    Estado por favor proveer un método definations utilizado en el código.

    OriginalEl autor Enigma State

  3. 1

    He modificado la clase anterior y se incluyeron todos los que faltan métodos

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Data.Common;
    namespace CodeGenerator
    {
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    private void btnGenerateCode_Click(object sender, EventArgs e)
    {
    string conStrJobsDB = ConfigurationSettings.AppSettings["jobsDBConStrKey"].ToString();
    CreateEntitiesFromDBTables(GetDataReader(conStrJobsDB));
    }
    private void CreateEntitiesFromDBTables(SqlDataReader dr)
    {
    if (dr != null)
    {
    string lstrOldTableName = string.Empty;
    StreamWriter swClassWriter = null;
    System.Text.StringBuilder sbFileName = null;
    System.Text.StringBuilder sbConstructorCode = null;
    System.Text.StringBuilder sbClassCode = null;
    FileInfo tableClassFile = null;
    while (dr.Read())
    {
    string lstrTableName = dr.GetString(0);
    string lstrAttributeName = dr.GetString(1);
    string lstrAttributeType = GetDotNetType(dr.GetString(2));
    //If table name is changed...
    if (lstrOldTableName != lstrTableName)
    {
    //and stream writer is already opened so close this class generation...
    if (swClassWriter != null)
    {
    CreateClassBottom(swClassWriter);
    swClassWriter.Close();
    }
    sbFileName = new System.Text.StringBuilder(lstrTableName);
    sbFileName.Append("Entity.cs");
    tableClassFile = new FileInfo(tbPath.Text + "\\" + sbFileName.ToString());
    swClassWriter = tableClassFile.CreateText();
    CreateClassTop(swClassWriter, lstrTableName);
    //sbConstructorCode = new System.Text.StringBuilder("\r\n\t///\r\n\t" +
    //    "///User defined Contructor\r\n\t///\r\n\tpublic ");
    //sbConstructorCode = new System.Text.StringBuilder();
    //sbConstructorCode.Append(lstrTableName);
    //sbConstructorCode.Append("(");
    }
    else
    {
    this.CreateClassBody(swClassWriter, lstrAttributeType, lstrAttributeName);
    //sbConstructorCode.AppendFormat("{0} {1}, \r\n\t\t",
    //  new object[] { lstrAttributeType, lstrAttributeName });
    //sbConstructorCode.AppendFormat("\r\n\t\tthis._{0} = {0};",
    //  new object[] { lstrAttributeName });
    }
    lstrOldTableName = lstrTableName;
    this.pBarMain.Increment(1);
    }
    MessageBox.Show("All classes generated.", "Done");
    }
    }
    private SqlDataReader GetDataReader(string conStrJobsDB)
    {
    SqlConnection connection = null;
    try
    {
    connection = new SqlConnection(conStrJobsDB);
    if (connection == null)
    return null;
    connection.Open();
    SqlCommand command = new System.Data.SqlClient.SqlCommand("exec spGenerateEntitiesFromTables", connection);
    SqlDataReader dr = command.ExecuteReader();
    if (dr.HasRows)
    return dr;
    else
    return null;
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    return null;
    }
    }
    private string GetDotNetType(string dbColumnType)
    {
    string returnType = string.Empty;
    if (dbColumnType.Equals("nvarchar"))
    returnType = "string";
    else if (dbColumnType.Equals("varchar"))
    returnType = "string";
    else if (dbColumnType.Equals("int"))
    returnType = "int";
    else if (dbColumnType.Equals("bit"))
    returnType = "bool";
    else if (dbColumnType.Equals("bigint"))
    returnType = "long";
    else if (dbColumnType.Equals("binary"))
    returnType = "byte[]";
    else if (dbColumnType.Equals("char"))
    returnType = "string";
    else if (dbColumnType.Equals("date"))
    returnType = "DateTime";
    else if (dbColumnType.Equals("datetime"))
    returnType = "DateTime";
    else if (dbColumnType.Equals("datetime2"))
    returnType = "DateTime";
    else if (dbColumnType.Equals("datetimeoffset"))
    returnType = "DateTimeOffset";
    else if (dbColumnType.Equals("decimal"))
    returnType = "decimal";
    else if (dbColumnType.Equals("float"))
    returnType = "float";
    else if (dbColumnType.Equals("image"))
    returnType = "byte[]";
    else if (dbColumnType.Equals("money"))
    returnType = "decimal";
    else if (dbColumnType.Equals("nchar"))
    returnType = "char";
    else if (dbColumnType.Equals("ntext"))
    returnType = "string";
    else if (dbColumnType.Equals("numeric"))
    returnType = "decimal";
    else if (dbColumnType.Equals("nvarchar"))
    returnType = "string";
    else if (dbColumnType.Equals("real"))
    returnType = "double";
    else if (dbColumnType.Equals("smalldatetime"))
    returnType = "DateTime";
    else if (dbColumnType.Equals("smallint"))
    returnType = "short";
    else if (dbColumnType.Equals("smallmoney"))
    returnType = "decimal";
    else if (dbColumnType.Equals("text"))
    returnType = "string";
    else if (dbColumnType.Equals("time"))
    returnType = "TimeSpan";
    else if (dbColumnType.Equals("timestamp"))
    returnType = "DateTime";
    else if (dbColumnType.Equals("tinyint"))
    returnType = "byte";
    else if (dbColumnType.Equals("uniqueidentifier"))
    returnType = "Guid";
    else if (dbColumnType.Equals("varbinary"))
    returnType = "byte[]";
    return returnType;
    }
    private void CreateClassTop(StreamWriter sw, string lstrTableName)
    {
    System.Text.StringBuilder sb = null;
    sb = new StringBuilder("public class " + lstrTableName +"Entity\n{");
    sw.Write(sb.ToString());
    }
    private void CreateClassBody(StreamWriter sw, string lstrAttributeType, string lstrAttributeName)
    {
    System.Text.StringBuilder sb = null;
    sb = new StringBuilder("\n\rpublic " + lstrAttributeType + " " + lstrAttributeName + " { get; set; }");
    sw.Write(sb.ToString());
    }
    private void CreateClassBottom(StreamWriter sw)
    {
    System.Text.StringBuilder sb = null;
    sb = new StringBuilder("\n\n}");
    sw.Write(sb.ToString());
    }
    }

    }

    OriginalEl autor Faheem

  4. 0

    creo que la forma más sencilla de generar cs clase a partir de la tabla de consulta en su base de datos , por ejemplo, en SQL server, puede utilizar esta consulta:

    declare @tblName sysname = 'SetYourTableName'
    declare @ResultText varchar(max) = 'public class ' + @tblName + '
    {'
    select @ResultText = @ResultText + '
    public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
    '
    from
    (
    select 
    replace(col.name, ' ', '_') ColumnName,
    column_id ColumnId,
    case typ.name 
    when 'bigint' then 'long'
    when 'binary' then 'byte[]'
    when 'bit' then 'bool'
    when 'char' then 'string'
    when 'date' then 'DateTime'
    when 'datetime' then 'DateTime'
    when 'datetime2' then 'DateTime'
    when 'datetimeoffset' then 'DateTimeOffset'
    when 'decimal' then 'decimal'
    when 'float' then 'float'
    when 'image' then 'byte[]'
    when 'int' then 'int'
    when 'money' then 'decimal'
    when 'nchar' then 'string'
    when 'ntext' then 'string'
    when 'numeric' then 'decimal'
    when 'nvarchar' then 'string'
    when 'real' then 'double'
    when 'smalldatetime' then 'DateTime'
    when 'smallint' then 'short'
    when 'smallmoney' then 'decimal'
    when 'text' then 'string'
    when 'time' then 'TimeSpan'
    when 'timestamp' then 'DateTime'
    when 'tinyint' then 'byte'
    when 'uniqueidentifier' then 'Guid'
    when 'varbinary' then 'byte[]'
    when 'varchar' then 'string'
    else 'UNKNOWN_' + typ.name
    end ColumnType,
    case 
    when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier') 
    then '?' 
    else '' 
    end NullableSign
    from sys.columns col
    join sys.types typ on
    col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
    where object_id = object_id(@tblName)
    ) t
    order by ColumnId
    set @ResultText = @ResultText  + '
    }'
    print @ResultText

    a continuación, Ejecute esta consulta y copia impresa de texto de Resultado en la Nueva Clase en Visual Studio

    espero que funcione para usted

    buena suerte

    OriginalEl autor Ali Gh

Dejar respuesta

Please enter your comment!
Please enter your name here