Fences, by design

“Oh, give me land, lots of land under starry skies above,
Don’t fence me in”
(“Don’t fence me in”, Ella Fitzgerald, 1956)

“If you want to keep something precious
You got to lock it up and throw away the key
If you want to hold onto your possession
Don’t even think about me”
(“If you love somebody set them free”, Sting, 1986)

Me escribe mi amigo Alain pidiéndome que comente acerca de la limitación de LINQ to SQL que le impide utilizar en sus modelos tablas que tengan una clave primaria autoincremental de tipo byte (TINYINT en SQL Server); el intento produce el error de ejecución “The primary key column of type ‘TinyInt’ cannot be generated by the server”. Lamentablemente, no se me ocurre ninguna razón válida que ofrecerle, salvo la ya tradicional frase “By design“, con la que generalmente los equipos de desarrollo quieren decir “Lo hicimos así por que nos salió de …” (complete la frase el lector con la referencia corporal o espiritual que prefiera, aunque a fin de cuentas, el único culpable es el cerebro de alguien). La solución pasa por definir el campo de tipo SMALLINT (16 bits) en lugar de TINYINT pero, ¿si SQL Server soporta este tipo de campos, por qué eliminar la posibilidad en LINQ to SQL? Probablemente alguien, con toda la buena intención del mundo, decidió que, dado el estrecho rango que ofrece TINYINT, sería mejor prohibir la utilización de tales campos; pero, ¿qué saben los desarrolladores de librerías de los posibles usos que podrán tener en el futuro sus desarrollos?

Evitar la imposición de tales “cercas” (“vallas”) artificiales es uno de los aspectos a tener muy en cuenta durante el desarrollo de librerías.

Nota adicional: He probado el mismo ejemplo bajo la Beta 1 de VS 2010 y comprobado que la situación se mantiene. Y en estos tiempos de costes ajustados y dada la particular relación entre LINQ to SQL y Entity Framework, lo más probable es que todo siga igual después de la salida de la nueva versión.


Pop/Rock tip: Esta vez introducimos el post con un fragmento de un tema clásico de Cole Porter que oímos por primera vez en la voz de la inmortal Ella Fitzgerald, una que nunca faltaba en nuestra casa de La Habana. Adicionalmente va otra referencia alegórica al tema de hoy: “If you love somebody set them free“, de aquel genial Sting que, después de romper con Police, conformó una banda espectacular con músicos afro-norteamericanos (el fallecido Kenny Kirland al piano, Branford Marsalis al clarinete, Darryl Jones al bajo y Omar Hakim en la batería, entre otros) de la que hoy quedan como recuerdo los álbumes “The Dream of the Blue Turtles” (1985) y “Bring on the Night” (1986).