Blog de programación, donde ademas de encontrar pequeños programas en C# tambien publicaré pequeñas ayudas para SQL Server

Vladimir Miranda - vladivirus666@gmail.com. Con la tecnología de Blogger.

lunes, 15 de agosto de 2016

Desarrollo en Capas (Asp.NET)


El día de hoy empiezo con este tema de desarrollo de aplicaciones en capas; para iniciar esta serie de articulos debemos tener estos puntos a considerar:
  1. Se utilizará Visual Studio 2013
  2. Se utilizará el lenguaje C# (aunque tambien se puede aplicar a Vb.NET)
  3. Se utilizará la versión 6 de Entity Framework
Para este artículo, lo primero que haremos es generar nuestro modelo de Datos *.edmx con Entity Framework (más información aquí). como habia mencionado antes, voy a utilizar Entity Framework 6, puesto que este framework (en comparación con versiones anteriores) viene cargado de nuevas características y mejoras; algunas a nivel de código y otras a nivel de rendimiento (más información aquí)..
La siguiente imagen, muestra como quedaría nuestro proyecto al final de la implementación y la comunicación que cada una de las capas tendrán entre si. La ventaja de realizar esta división será en mayor parte la reutilización de código, mejor rendimiento de la aplicación entre otros.
image
Para el ejemplo voy a utilizar una Base de Datos (BD) “Trabajador” la cual contiene las siguientes tablas:
image
Para empezar crearemos una Solución en blanco para despues añadir un nuevo proyecto de tipo Biblioteca de Clases al cual lo vamos a nombrar AccesoDatos y vamos a eliminar la clase que se genera por defecto; al final tendremos nuestra aplicación de esta manera:
image
Ahora vamos a generar nuestro modelo desde la base de datos; para ello damos clic derecho en el proyecto vamos a Agregar->Nuevo Elemento (Ctrl+Mayús.+A)
image
Una vez seleccionado, nos muestra una ventana con el asistente para Entity Data Model, en mi caso optaré por Generar desde la base de datos, ya que previamente he creado mi BD.
image
Ahora especificamos la cadena de conexión para la BD
image
Ahora escogemos la versión de Entity Framework que deseamos utilizar:
image
Ahora vamos a seleccionar las tablas que queremos incluir en el modelo
image
Al dar clic en finalizar, podremos ver nuestro diagrama de la BD y es momento de verificar que se haya generado el archivo *.tt ya que es ahi donde se encuentran las clases separadas por cada tabla.
image
image
Ahora vamos a añadir un nuevo proyecto del tipo biblioteca de clases al cual lo vamos a nombrar Entidades y lo que haremos es mover la plantilla ModeloTrabajador.tt hacia este proyecto. Para poder realizar este procedimiento, tendre que dirigirme a la carpeta donde se encuentra el Proyecto AccesoDatos y moveré todos los elementos que son parte de la plantilla ModeloTrabajador.tt hacia la carpeta donde se encuentra en proyecto Entidades
image
Actualizamos el proyecto dando clic en el botón actualizar en el Explorador de Soluciones (image). En este punto en el proyecto se nos mostrará la plantilla ModeloTrabajador.tt con una marca de color amarillo; esto nos está indicando que VS no pudo encontrar los archivos en la ruta, esto es normal.
Ahora vamos al proyecto Entidades y damos clic en Mostrar todos los archivos en el Explorador de Soluciones (image). Ahora el proyecto debe verse de la siguiente manera:
image
Eliminamos los archivos en ModeloTrabajador.tt e incluimos los archivos que movimos al proyecto Entidades; damos doble clic en la plantilla ModeloTrabajador.tt en el proyecto Entidades.
Como hemos movido la plantilla a un proyecto diferente, debemos configurar la línea que esta apuntando al modelo *.edmx, buscamos la ruta string inputFile para que apunte hacia el modelo que se encuentra en el proyecto AccesoDatos
image
Al grabar las clases que representan a las tablas volverán a quedar dentro de la plantilla ModeloTrabajador.tt
image
Ahora, vamos a regresar al proyecto AccesoDatos, y cambiaremos el espacio de nombres de la plantilla ModeloTrabajador.Context.tt y ModeloTrabajador.Context.cs, ya que, las entidades ahora se encuentran en el proyecto Entidades, abrimos la ventana de propiedades (F4 sobre la plantilla) de la plantilla ModeloTrabajador.Context.tt y establecemos el espacio de nombres en Entidades (realizamos los mismos pasos para ModeloTrabajador.Context.cs).
image
Ahora para que el proyecto AccesoDatos pueda comunicarse con el proyecto Entidades tenemos que agregar una referencia del proyecto Entidades hacia el proyecto AccesoDatos. Damos clic derecho en References y damos clic en Agregar Referencia. Vamos al apartado Solución->Proyectos y selecionamos Entidades.
image
Y esta sería la parte final de esta parte del proyecto, hasta el momento hemos creado el modelo de nuestra base de datos, el contexto y las clases de entidad; separamos las entidades en un proyecto diferente para que estas puedan ser usadas en todas las capas de acuerdo a la estructura presentada.
En los próximos días continuaré con el código que tendrá la capa de Acceso a Datos.
Descargar proyecto

miércoles, 3 de agosto de 2016

Incluir código en tu post de blogger


Cuando quieres escribir un post que incluye ciertos fragmentos de código, si bien es cierto, sabes acerca de html (o deberías saberlo),; pero en mi caso busco lo mas rápido posible de utilizar. Hace unos años atrás (no recuerdo fechas exactas) Microsoft puso en nuestras manos una herramienta extraordinaria (criterio personal Winking smile) ; Windows Live Writer era un editor de blog muy completo; incluso tenia algunos plugins que se podían aplicar.

El problema radica cuando, se descontinuó en el mercado; en ese momento y al haber formateado mi computador con W10 no tenia manera de tener la misma facilidad con otras herramientas para que los fragmentos de código se muestren diferentes al formato “standard” del blog.

Por suerte, trasteando un poco por el codigo html del blog; encontre una solución práctica para realizar este proceso; a continuación los pasos:

Encontrar la plantilla

El primer paso para realizar este proceso es buscar la plantilla que queremos editar en blogger, en mi caso escogeré este blog dando clic en el nombre para que se muestre todas las opciones que se pueden manejar.

image

En lap arte izquierda iré a buscar la opción de “Plantilla” y despues dando clic en “Editar Html” que se encuentra bajo el recuadro de la vista previa del blog.

image

Editar el HTML

Una vez que hemos dado clic en el botón Editar HTML nos abrira una serie de código html; debemos buscar (CTRL+F) ]]></b:skin>

una vez encontrado esto debemos insertar el siguiente codigo antes code{
   background:#FFFFFF;
   font-family: Courier New;
   display:block;
   border:1px solid #999999;
   padding:10px;
}

En mi caso el resultado final quedo de esta forma body.mobile .AdSense {
   margin: 0 -10px;
}
code {
   background:#FFFFFF;
   font-family: Courier New;
   display:block;
   border:1px solid #999999;
   padding:10px;
}
]]></b:skin>

Guardamos los cambios en la plantilla y eso sería todo.

Utilizando el codigo

Ahora, al momento que queramos incluir un codigo en el blog; solo debemos rodearlos con el tag <code></code> y eso sería todo, el resultado final lo pueden ver en las lineas de este post.

Saber la fecha de modificacion de un objeto (SQL Server)


El día de hoy estuve revisando unos procedimientos almacenados que se encuentran en mibase de Datos debido a un error en los registros en las tablas, vi que el error fue corregido en el procedimiento almacenado; pero, el inconveniente era que necesitaba saber en que fecha se realizo la correcion del error para compararlo con la fecha de los registros y poder identificar si existía un error adicional.

Para i suerte recordé, que se puede saber esta informacion con una “herramienta” integrada en SQL, se trata de sys.all_objects (Mas informacion aquí) el cual nos puede entregar esa información y algunas otras mas; en mi caso lo unico que necesitaba era la fecha de creacion y la de modificacion. Mi consulta quedo de esta manera:

SELECT
   [name],
   [object_id],
   [create_date],
   [modify_date]
FROM sys.all_objects
WHERE [type] = 'P'
AND [object_id] > 0
AND [name] like '%sp_cons%'
ORDER BY [modify_date] DESC

De esta consulta podemos destacar lo que colocamos en la cláusula WHERE, he puesto como condicion: [type] = 'P' lo que hace esto es definirme el tipo de objeto que quiero; en mi caso Procedimiento Almacenado.

En este link se puede encontrar el listado de todos los tipos que existen, en esta lista también pueden encontrarlos:

type char(2) Tipo de Objeto
    AF = Función de agregado (CLR)
    C = Restricción CHECK
    D = DEFAULT (restricción o independiente)
    F = Restricción FOREIGN KEY
    FN = Función escalar de SQL
    FS = Función escalar del ensamblado (CLR)
    FT = Función con valores de tabla de ensamblado (CLR)
    IF = Función SQL insertada con valores de tabla
    IT = Tabla interna
    P = Procedimiento almacenado de SQL
    PC = Procedimiento almacenado del ensamblado (CLR)
    PG = Guía de plan
    PK = Restricción PRIMARY KEY
    R = Regla (estilo antiguo, independiente)
    RF = Procedimiento de filtro de replicación
    S = Tabla base del sistema
    SN = Sinónimo
    SQ = Cola de servicio
    TA = Desencadenador DML del ensamblado (CLR)
    TF = Función con valores de tabla SQL
    TR = Desencadenador DML de SQL
    TT = Tipo de tabla
    U = Tabla (definida por el usuario)
    UQ = Restricción UNIQUE
    V = Vista
    X = Procedimiento almacenado extendido