Estoy buscando mantener las preferencias del usuario en una colección de pares de valores de nombre, donde el valor puede ser un int, bool o cadena.Cómo mapear IDictionary <cadena, objeto> en Fluidez NHibernate?
Hay algunas maneras de pelar este gato, pero el método más conveniente que puedo pensar es algo como esto:
public class User
{
public virtual IDictionary<string, object> Preferences { get; set; }
}
con su uso como:
user.Preferences["preference1"] = "some value";
user.Preferences["preference2"] = 10;
user.Preferences["preference3"] = true;
var pref = (int)user.Preferences["preference2"];
estoy no estoy seguro de cómo mapear esto en Fluent NHibernate, aunque sí creo que es posible.
En general, le asigne una cadena simple diccionario <, cadena > como:
HasMany(x => x.Preferences)
.Table("Preferences")
.AsMap("preferenceName")
.Element("preferenceValue");
Pero con un tipo de 'objeto', NHibernate no sabe cómo tratar con él. Me imagino que podría crearse un UserType personalizado que descompone un 'objeto' en una cadena que representa su Tipo y una cadena que representa el valor. Tendríamos una tabla que se ve algo así como esto:
Table Preferences
userId (int)
preferenceName (varchar)
preferenceValue (varchar)
preferenceValueType (varchar)
y el mapeo de Hibernate se desea:
<map name="Preferences" table="Preferences">
<key column="userId"></key>
<index column="preferenceName" type="String" />
<element type="ObjectAsStringUserType, Assembly">
<column name="preferenceValue" />
<column name="preferenceValueType"/>
</element>
</map>
No estoy seguro de cómo le gustaría asignar este Fluido en NHibernate.
Tal vez haya una mejor manera de hacerlo, o tal vez debería simplemente absorberlo y usar IDictionary < cadena, cadena >. ¿Algunas ideas?
¿Encontró una solución? –
Gracias, justo lo que estaba buscando – jolySoft