lunes, 14 de febrero de 2011

HTML.Helper y EF4.0. Evitar los campos nullables.

Estoy construyendo una pequeña aplicación CRUD para aprender y practicar MVC3 + Razor + Entity Framework 4.0. El objetivo es hacer un pequeño programa muy liviano para poder correr en un navegador de cualquier smartphone actual sin necesidad de tener que tener un programa cliente.

Empezando de la manera clásica, primero me he echo mi modelo de datos en sql y después he creado el modelo en EF 4.0. Coser y cantar. Sin los extraños problemas de la versión anterior.

Lo curioso es que algo que me he encontrado y que me sigo encontrando en los diferentes esquemas de datos, es la posibilidad de tener campos nullables en la sql. Y en el EF provocan cierta incomodidad al trabajar con ellos.

Por ejemplo, algo tan sencillo como declarar un helper para poder editar un número se complica si el campo que estamos trayendo es del tipo nullable (int?).

        <div class="editor-field">
@Html.EditorFor(model => model.numeroEntradas)
@Html.ValidationMessageFor(model => model.numeroEntradas)
</div>



Osea, un buen consejo para trabajar más cómodo: haz tus campos en la base de datos “no nullables” y ponle un valor por defecto. Te evitaras dolores de cabeza.

3 comentarios:

Julio dijo...

Buenas... Pues he decir que no me gusta la solucion... ¿y si te encuentras las tablas ya creadas y no puedes modificarlas? Tampoco me gustan los valores por defecto en general. Como no conzoco los helpers estos, no puedo sugerir solcuión alternativa.

Juan Quijano dijo...

Buenas,

Tienes toda la razón Julio. Si no puedes evitarlo en el esquema, lo tendrás que evitar en la DAO y arrastrar el incordio de comprobar que el entero no es null para poder hacerle una conversión a Int para poder usarlo.

Por ejemplo lo siguiente no se puede hacer sin conversión:
int? valor = 0;
int suma = valor + 1

Por eso es un peñazo.

Juan Quijano dijo...

Y entonces el Analizador de VS te dirá que esto es un error ya que un int no puede ser nulo por definición.

Mejor le dices al esquema que el campo no puede tener nulos y le pones un valor por defecto.

Es llevar la regla de no devolver null a el esquema de datos.