Sto testando NHibernate come soluzione alle esigenze ORM della mia azienda. Per fare ciò, ho prodotto un piccolo modello di test basato su una scuola, che fornisce alcuni utili casi limite per la gestione di NHibernate.Mappatura di una struttura immutabile come componente in NHibernate
Sto riscontrando problemi nel trovare come mappare una struttura personalizzata come componente di un'entità senza utilizzare l'interfaccia IUserType
. Vorrei sottolineare che è un requisito importante che le classi di dominio siano in un assembly separato dal nostro codice NHibernate e che l'assembly del dominio non abbia un riferimento a NHibernate.
La struttura personalizzata è Time
, utilizzata per rappresentare un'ora del giorno in ore e minuti. È una struttura immutabile molto semplice e fornita solo per illustrare il problema di una struttura personalizzata. Il costruttore prende un singolo argomento che è ore e minuti, come numero intero nel 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; }
}
Questa struttura viene utilizzata come componente della classe Lesson
per memorizzare l'ora del giorno di iniziare la lezione:
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; }
}
Questa classe mappe direttamente a questa tabella:
CREATE TABLE Lessons
(
ID INT,
Subject NVARCHAR(128)
TeacherID INT,
Day VARCHAR(9),
StartTime INT, // <-- Maps to custom type.
Periods INT
)
Sto cercando un modo per mappare questa struttura come componente della classe Lesson
, in modo che NHibernate legga un valore di proprietà sulla struttura (come qualsiasi altro componente) t o ottenere un valore per la colonna, ma inizializzerà una nuova istanza della struttura passando il valore della colonna al costruttore durante la lettura del valore dalla colonna nell'entità.
Se avete suggerimenti, sarebbe super. Se vuoi dirmi che questo non può essere realizzato senza usare IUserType
, anche questa è una buona risposta.
Buone informazioni; +1 per te. Il mio requisito di non utilizzare IUserType è semplicemente quello di vedere quali alternative sono disponibili, che avete gentilmente fornito. –
Nicholas - se abbiamo strutture che contengono tipi di Entità (a differenza dei tipi di valore), possiamo mapparle con IUserType? Se é cosi, come; se no, qual è l'alternativa? – fostandy