2009-05-01 10 views
5

Me gustaría tener un objeto 'UnassignedDepartment' en lugar de dejar que los empleados tienen un Departamento nulo:NHibernate correspondencia NULL Objeto/Patrón Caso especial

public class UnassignedDepartment : Department 
{ 
    public UnassignedDepartment() : base("not yet assigned") { 
     Id = -99; <-- just some Id that can be held constant, not be generated.. 
    } 
} 

Ésta es accesible por un campo conveniencia estática en la clase Departamento :

public class Department : Entity 
{ 
    public static readonly Department UNASSIGNED = new UnassignedDepartment(); 

    ....  
} 

estoy usando marco S # de rpArch como la Entidad de base, con una mezcla de HNF automapping, anula & convenciones. Desde el punto de vista de la persistencia, parece lógico mantener esto con los otros Departamentos con un Id 'especial', pero no sé cómo hacerlo correctamente. ¡Por favor iluminame!

Thx, Berryl

Respuesta

2

no entiendo lo que estás tratando de lograr, pero tal vez esto ayude. Asigne el Departamento como un campo privado en Empleado y devuelva UnassignedDepartment si es nulo.

private Department _department; // map this in FNH 

public Department Department 
{ 
    get { return _department ?? _department.UNASSIGNED; } 
} 
+0

Perdón por no ser más claro. El modelo de objetos tiene toda la lógica que necesito y funciona muy bien. Es el mapeo de persistencia (NHibernate/FNH) que trato de resolver, lo cual me hizo pensar. En lugar de pensar en esto como un problema de herencia, creo que solo necesito extender el Repositorio adecuado para aplanar la herencia del objeto y ver esto como un departamento más; uno que tiene un caso especial (duh). Lo intentaré mañana y publicaré los resultados O haré una pregunta diferente :-). – Berryl

+0

Parafraseado de Fowler Refactoring, una opción para que una empresa de servicios eléctricos se ocupe de un cliente residencial desconocido (tal vez abandonaron la casa, lo que sea) es que la propiedad del cliente sea literalmente nula. Pero luego debe verificar las referencias nulas cuando invoca Customer.CalculateBill, por lo que crea un objeto que es una subclase de Cliente para usar el polimorfismo y evitar toda la comprobación nula (Objeto nulo). Mejor aún, crea una subclase ocupante que conozca la dirección correcta y pueda acumular los costos cuando alguien toma la casa ejecutada y se convierte en un cliente normal. – Berryl

+0

Mi pregunta es cómo asignar esto en el archivo db utilizando NHibernate. Un concepto (creo que aquí es donde iba Jamie) podría ser utilizar NHib para acceder a un campo pvt y almacenar null en el DB mientras el modelo de objetos trata a nulo como Ocupante o, en mi caso, UnassignedDepartment. ¿Pero eso significa que pierdes integridad referencial? Además, te limitaría a un caso especial. La única otra opción que veo es hacer que el db también trate este especial, con un Id constante (es decir, -1), pero luego tiene problemas que evitan las ediciones en él. Esta es la motivación y el problema que estoy tratando de resolver. – Berryl

Cuestiones relacionadas