Estoy probando NHibernate para que sea la solución a las necesidades de ORM de mi empresa. Para hacer esto, he producido un pequeño modelo de prueba basado en una escuela, proporcionando algunos casos útiles para NHibernate.Asignación de una estructura inmutable como componente en NHibernate
estoy teniendo problemas para encontrar la manera de asignar una estructura personalizada como un componente de una entidad sin utilizar la interfazIUserType
. Debo enfatizar que es un requisito importante que las clases de dominio estén en un ensamblaje separado de nuestro código NHibernate, y que el ensamblado de dominio no tenga una referencia a NHibernate.
La estructura personalizada es Time
, que se utiliza para representar una hora del día en horas y minutos. Es una estructura inmutable muy simple y solo se proporciona para ilustrar el problema de una estructura personalizada. El constructor toma un solo argumento que es horas y minutos, como un entero en el formato hhmm
.
public struct Time
{
public Time(int hoursAndMinutes)
{
// Initialize Structure //
}
public int Hours { get; private set; }
public int Minutes { get; private set; }
public int HoursAndMinutes { get; private set; }
}
Esta estructura se utiliza como un componente de la clase Lesson
para almacenar la hora del día de iniciar la lección:
public class Lesson
{
public int ID { get; private set; }
public Teacher Teacher { get; internal set; }
public DayOfWeek Day { get; set; }
public Time StartTime { get; set; } // <-- Custom Type
public int Periods { get; set; }
}
Esta clase correlaciona directamente con esta tabla:
CREATE TABLE Lessons
(
ID INT,
Subject NVARCHAR(128)
TeacherID INT,
Day VARCHAR(9),
StartTime INT, // <-- Maps to custom type.
Periods INT
)
Estoy buscando una forma de asignar esta estructura como un componente de la clase Lesson
, de modo que NHibernate lea un valor de propiedad en la estructura (como cualquier otro componente) t o obtener un valor para la columna, pero inicializará una nueva instancia de la estructura al pasar el valor de la columna al constructor al leer el valor de la columna en la entidad.
Si tiene alguna sugerencia, sería genial. Si quiere decirme que esto no se puede lograr sin usar IUserType
, también es una buena respuesta.
Buena información; +1 para ti. Mi requisito para no usar IUserType es simplemente ver qué alternativas hay disponibles, que usted ha proporcionado gentilmente. –
Nicholas: si tenemos estructuras que contienen tipos de entidades (a diferencia de los tipos de valores), ¿podemos asignarlos con IUserType? Si es así, cómo; si no, ¿cuál es la alternativa? – fostandy