Kullanıcı tercihlerini, değer bir int, bool veya dize olabileceği bir ad değeri çiftleri koleksiyonuna devam ettirmek istiyorum.IDictionary <string, object> Fluent NHibernate ile nasıl eşlenir?
Orada bu kediyi için birkaç yol vardır, ama aklıma gelen en uygun yöntem böyle bir şeydir:
public class User
{
public virtual IDictionary<string, object> Preferences { get; set; }
}
onun kullanımı ile olduğu gibi:
user.Preferences["preference1"] = "some value";
user.Preferences["preference2"] = 10;
user.Preferences["preference3"] = true;
var pref = (int)user.Preferences["preference2"];
Ben Fluent NHibernate'de nasıl haritalanacağından emin değilim, ancak bunun mümkün olduğunu düşünüyorum.
Genellikle, gibi dize > daha basit bir sözlük < dize map olacaktır:
HasMany(x => x.Preferences)
.Table("Preferences")
.AsMap("preferenceName")
.Element("preferenceValue");
Ama 'nesne' türüyle NHibernate bununla nasıl başa bilmiyor. Türünü temsil eden bir dizgeye ve değeri temsil eden bir dizgeye 'nesne' ayıran özel bir Kullanıcı Türü oluşturulabileceğini hayal ediyorum. Böyle tür görünen bir tablo olurdu:
Table Preferences
userId (int)
preferenceName (varchar)
preferenceValue (varchar)
preferenceValueType (varchar)
ve hazırda bekletme haritalama bu istiyorum:
<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>
Sana Akıcı NHibernate bu harita nasıl emin değilim.
Belki bunu yapmak için daha iyi bir yol var, ya da belki de sadece emmek ve IDictionary < dize, dize > kullanın. Herhangi bir fikir?
Bir çözüm buldunuz mu? –
Teşekkürler, sadece ne aradığımı – jolySoft