Pregunta
Tengo el siguiente código y se está dando en relación con las llaves y otras cosas.
<#@ template language="C#" debug="True" hostspecific="True" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.xml" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SqlClient" #>
namespace MyProject.Entities
{
public class
{
<#
string connectionString =
"Server=localhost;Database=GridViewGuy;Trusted_Connection=true";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
System.Data.DataTable schema = conn.GetSchema("TABLES");
foreach(System.Data.DataRow row in schema.Rows)
{
#>
public class <#= row["TABLE_NAME"].ToString() #>
{
}
}
}
}
¿Alguien puede detectar el problema?
Solución
La razón por la que no está compilando se debe a que no tiene una llave de cierre correspondiente para el bloque foreach dentro <# #>
etiquetas. Es necesario hacer los siguientes cambios:
foreach(System.Data.DataRow row in schema.Rows)
{
#>
public class <#= row["TABLE_NAME"].ToString()#>
{
}
<#
} //this was missing.
#>
Además, tenga en cuenta que el código va a crear una clase sin nombre seguido de una lista de clases anidadas con los nombres de las tablas. De esta manera:
public class
{
public class Table1
{
}
public class Table2
{
}
//... and so on..
}
Esto puede no ser lo que usted está tratando de lograr.
Otros consejos
En el primer bloque, se inicia un bloque de código
foreach(System.Data.DataRow row in schema.Rows)
{
#>
pero nunca por terminado. En algún lugar por debajo de lo necesario lo siguiente:
<# } #>
editar - parece que sería la llave de cierre justo por debajo de la definición de clase anidada