Lilypie Primer PicLilypie Primer Ticker

lunes, 25 de febrero de 2008

NHibernate.Timestamp != SQLServer.Timestamp

Al intentar utilizar el control de concurrencia, mediante las etiquetas <timestamp> o <version> de NHibernate junto con el tipo Timestamp de SQL Server, nos encontramos con un mensaje como este:

"Could not cast the value in field ts_times4_ to the Type TimestampType. Please check to make sure that the mapping is correct and that your DataProvider supports this Data Type."

debido a que el tipo Timestamp de SQL Server es recibido como un byte[] en el .NET Framework y no es compatible con los tipos que NHibernate usa para el control de las versiones. (Aunque la documentación de NHibernate diga lo contrario)

Luego de algunas horas intentando resolver este problema encontré un artículo en CodeProject q resuelve el problema.

http://www.codeproject.com/KB/dotnet/OptLocking_PrefixTable.aspx

Ojala les sea de utilidad

jueves, 21 de febrero de 2008

Herramientas para GMail en MSDN CodeGallery

Se publicó en MSDN CodeGallery una libreria de clases muy sencillas, pero q nos pueden ahorrar algún tiempo, que nos permiten integrar nuestras aplicaciones .NET con el excelente servicio de GMail.

Pueden descargar el código desde aqui

Saludos

martes, 19 de febrero de 2008

NHibernate: Intellisense para archivos de configuracion

Un tip para lograr soporte de Intellisense para los archivos de configuración y mapeo (mapping files) de NHibernate

Simplemente debemos copiar los archivos [NhibernateInstallDir]\src\NHibernate\*.xsd en:

[VSInstallDir]\Xml\Schemas -- si estamos usando VS2005, o

[VSInstallDir]\Common7\Packages\schemas\xml -- si aun estamos usando VS2003

Espero les sea de utilidad a la hora de escribir sus archivos xml a mano :)

lunes, 18 de febrero de 2008

Si existe: actualizar; si no: insertar

Comparto con ustedes un tip sobre BD que encontré aqui

A menudo necesitamos actualizar un registro existente en una tabla o insertarlo en caso de no existir. La forma mas simple de hacerlo es:

IF EXISTS(SELECT * FROM MiTabla WHERE MiLlave = 10) THEN
UPDATE MiTabla SET MiCampo = 100 WHERE MiLlave = 10
ELSE
INSERT INTO MiTabla (MiLlave, MiCampo) VALUES (10,100)

Este script funciona, sin embargo no es la forma más óptima de realizar esta operación, pues el motor de la BD realiza dos búsquedas en la tabla. Una para el SELECT y otra para el Update.

Una mejor forma de hacer esta operación es:

UPDATE MiTabla SET MiCampo = 100 WHERE MiLlave = 10
IF @@ROWCOUNT = 0 THEN
INSERT INTO MiTabla (MiLlave, MiCampo) VALUES (10,100)

Asi le ahorramos un poco de trabajo a nuestro servidor.

Saludos