NHibernate映射字典到多个表

时间:2011-08-28 13:12:02

标签: nhibernate

我最近遇到了将nhibernate映射字典用于特定关系模型的问题。 OO方包括如下实体

class B // base class
{
    public long Id;
    public string Name;
    public Owner; // a reference to the owner group
}

class Group : B
{
    public IDictionary<string, B> ObjectsInGroup; 
        // dictionary for a look-up from name of any object contained in the group 
        // to the object itself
}

我希望使用下表来保留上述实体

用于保存B类实体的表B的列定义:

  • Id:bigint(主键)
  • 姓名:nvarchar(50)
  • 所有者:bigint(与Id作为外键相关)

用于保存Group类型实体的表G的列定义:

  • Id:bigint(主键)

由于组中的对象是在字典中管理的,并且打算使用nhibernate的基于字典的映射,我认为映射所基于的实际表是从表B中提取的,作为支持a的标准表。字典映射的形式如下:

Id(字典提供者)|钥匙|值

其中每一行代表具有标识符“Id”的实体字典中的键值对。

所以基本上这种形式的虚构表可以通过跟踪SQL来创建启用映射(只是为了提出一些想法或澄清问题):

选择g.Id,o.Name,o.Id 来自G g,B o 其中o.Owner = g.Id

这是一个简化的模型,原始的可能有一个单独的叶对象类,可能有一个额外的表涉及使问题更严重。

不确定NHibernate是否真的支持这样的映射,或者是否有一些解决方法或需要重新设计模型。任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我认为这里的问题不是映射而是模型 从逻辑上讲,我认为在B课程中收集Group会更有意义 (IEnumerable<B> ObjectsInGroup
使用LINQ ObjectsInGroup.Where(b => b.Name == "blah");可以轻松搜索对象的名称 这样你的映射就会简单得多,你的类也更容易理解。