Как отобразить IDictionary <строка, объект> в Быстром NHibernate?

Я надеюсь сохранять пользовательские настройки в набор пар значение-имя, где значение может быть интервалом, 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 <строка, строка>. Какие-либо идеи?

7
задан Nick W 21 March 2010 в 00:52
поделиться