Я надеюсь сохранять пользовательские настройки в набор пар значение-имя, где значение может быть интервалом, bool, или строкой.
Существует несколько способов освежевать эту кошку, но самый удобный метод, о котором я могу думать, является чем-то вроде этого:
public class User
{
public virtual IDictionary<string, object> Preferences { get; set; }
}
с его использованием как:
user.Preferences["preference1"] = "some value";
user.Preferences["preference2"] = 10;
user.Preferences["preference3"] = true;
var pref = (int)user.Preferences["preference2"];
Я не уверен, как отобразить это в Быстром NHibernate, хотя я действительно думаю, что это возможно.
Обычно Вы отобразили бы более простой Словарь <строка, строка> как:
HasMany(x => x.Preferences)
.Table("Preferences")
.AsMap("preferenceName")
.Element("preferenceValue");
Но с типом 'объекта', NHibernate не знает, как иметь дело с ним. Я предполагаю, что пользовательский UserType мог быть создан, который повреждает 'объект' вниз к строке, представляющей ее Тип и строку, представляющую значение. У нас была бы таблица, которая отчасти походит на это:
Table Preferences
userId (int)
preferenceName (varchar)
preferenceValue (varchar)
preferenceValueType (varchar)
и быть в спящем режиме отображение хотело бы это:
<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>
Я не уверен, как Вы отобразили бы это в Быстром NHibernate.
Возможно, существует лучший способ сделать это, или возможно я должен просто высосать его и использовать IDictionary <строка, строка>. Какие-либо идеи?