我有以下数据库表:
Settings
Key | Value
---------------|-------------------
SomeSetting | Foo
AnotherSetting | Bar
... | ...
并希望将此映射到以下对象:
public class Settings
{
public virtual string SomeSetting { get; set; }
public virtual string AnotherSetting { get; set; }
}
我怎样才能使用(流畅的)NHibernate完成这个?
答案 0 :(得分:1)
我会将键/值对映射到私有IDictionary,并通过访问字典来公开属性。有关创建字典的信息,请参阅Ayende's blog entry on map。类似的东西:
public class Settings
{
private IDictionary<string, string> _dict;
//initialize dictionary in constructor
public Settings()
{
_dict = new Dictionary<string, string> { {"SomeSetting", string.Empty} };
}
public virtual string SomeSetting
{
get { return _dict["SomeSetting"]; }
set { _dict["SomeSetting"] = value; }
}
// etc.
}
答案 1 :(得分:0)
另一种选择是拥有两列:Key,Value
将它们映射到数据库中的一列,现在编写一个带有属性的存储库类,负责查询密钥上的数据库并获取值。您的存储库模型可能与您当前的对象模型类似。
public class Settings
{
private readonly ISession _session;
public Settings(ISEssion session)
{
_session=session;
}
public Setting SomeSetting { get {return session.QueryOver<Setting>().SingleOrDefault(x.Key=="SomeSetting "} }
}
你觉得怎么样?