Presentamos la cadena Enum al desarrollador de entidades

Este artículo explica y demuestra la asignación de una representación de cadena de enumeración a campos de cadena en la base de datos de Entity Developer. La muestra que se muestra en esta publicación está incluida en nuestra aplicación NHibernate Mapping Samples descrita en el artículo de blog NHibernate Mapping Samples correspondiente. Se llama la "Propiedad de tipo de enumeración"; sin embargo, es probable que otras muestras de esta aplicación sean útiles para los usuarios de NHibernate, tanto para principiantes como para profesionales, por lo que recomendamos descargarla a cualquiera que desarrolle aplicaciones de NHibernate.

El problema con la visualización de tipos de enumeración en NHibernate es que NHibernate puede hacer coincidir valores de tipo de enumeración solo con columnas numéricas en la base de datos sin más manipulación. Sin embargo, si los valores de enumeración se almacenan en la base de datos como cadenas, NHibernate requiere que el usuario realice algunas acciones adicionales.

Nuestro ejemplo utiliza la siguiente tabla de base de datos:

CREATE TABLE Employee (
  EmployeeID INTEGER PRIMARY KEY,
  EmployeeType INTEGER NOT NULL,
  FirstName VARCHAR(50) NOT NULL,
  LastName VARCHAR(50) NOT NULL,
  Sex VARCHAR(20) NOT NULL
);

Los campos EmployeeType y Sex de la clase Employee correspondiente deben asignarse a los tipos de enumeración correspondientes:

    public enum EmployeeType : int
    {
        Manager = 1,    
        Clerk = 2,    
        Courier = 3
    }

    public enum SexType : int
    {
        Male,    
        Female
    }

Los valores de EmployeeType se almacenan en la base de datos en formato numérico, por lo que este campo es fácil de mostrar. Se define en el archivo XML de la siguiente manera:

    <property name="EmployeeType" type="EmployeeType">
      <column name="EmployeeType" not-null="true" sql-type="INTEGER" />
    </property>

El campo Sex almacena sus valores de enumeración en la base de datos como cadenas y, en este caso, no se puede usar el mapeo estándar. Debe definir una clase adicional que herede la clase Nhibernate.Type.EnumStringType de la compilación NHibernate.dll, para cada una de las siguientes enumeraciones:

    public class SexTypeEnumStringType : NHibernate.Type.EnumStringType
    {
        public SexTypeEnumStringType() : base(typeof(SexType))
        {
        }
    }

Y luego debe usar esta clase para mostrar esta propiedad en un archivo XML:

    <property name="Sex" type="SexTypeEnumStringType">
      <column name="Sex" not-null="true" length="20" sql-type="VARCHAR" />
    </property>

Por lo tanto, almacenar valores de enumeración como filas en una base de datos requiere una clase adicional para cada una de dichas enumeraciones y una anulación de tipo para mostrar cada propiedad de ese tipo de enumeración. Esto significa tiempo extra y molestias.

Con Entity Developer para NHibernate puede deshacerse fácilmente de todos estos inconvenientes. En nuestro ejemplo, simplemente seleccione el campo Clase de sexo del empleado y actívelo en la ventana Propiedades. Modo de almacenamiento de enumeración Propiedad de cadena. Luego, Entity Developer generará automáticamente todas las clases requeridas y las mostrará en la pantalla generada.

La propiedad de almacenamiento Enum predeterminada

Si siempre almacena los valores de enumeración en la base de datos como cadenas, puede configurar el modo de almacenamiento Enum para todas las propiedades de la entidad en el modelo en lugar de configurarlo manualmente para cada propiedad. Para hacer esto, abra el cuadro de diálogo Configuración del modelo (puede hacerlo haciendo clic con el botón derecho en el nodo raíz del modelo en el Explorador de modelos o en un espacio vacío en el gráfico y seleccionando Configuración del modelo en el menú contextual), y en Común página establecer el valor requerido para El repositorio Enum es el predeterminado.. Esto cambia el valor predeterminado. El repositorio Enum es el predeterminado. property para todas las propiedades de la entidad para las que el valor de este parámetro no se ha cambiado manualmente.

El repositorio de Enum predeterminado está en la configuración del modelo.

Si desea utilizar una estrategia para mostrar valores de enumeración que no sean el modelo predeterminado para una propiedad, siempre puede especificarlo configurando Modo de almacenamiento de enumeración para esta propiedad al valor apropiado.

Artículos de interés

Subir