(流畅)NHibernate:将完整表映射到一个对象

时间:2011-08-22 11:09:53

标签: nhibernate fluent-nhibernate nhibernate-mapping

我有以下数据库表:

Settings

Key            | Value
---------------|-------------------
SomeSetting    | Foo
AnotherSetting | Bar
...            | ...

并希望将此映射到以下对象:

public class Settings
{
      public virtual string SomeSetting { get; set; }

      public virtual string AnotherSetting { get; set; }
}

我怎样才能使用(流畅的)NHibernate完成这个?

2 个答案:

答案 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 "} }

}
你觉得怎么样?