我最近遇到了将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的列定义:
用于保存Group类型实体的表G的列定义:
由于组中的对象是在字典中管理的,并且打算使用nhibernate的基于字典的映射,我认为映射所基于的实际表是从表B中提取的,作为支持a的标准表。字典映射的形式如下:
Id(字典提供者)|钥匙|值
其中每一行代表具有标识符“Id”的实体字典中的键值对。
所以基本上这种形式的虚构表可以通过跟踪SQL来创建启用映射(只是为了提出一些想法或澄清问题):
选择g.Id,o.Name,o.Id 来自G g,B o 其中o.Owner = g.Id
这是一个简化的模型,原始的可能有一个单独的叶对象类,可能有一个额外的表涉及使问题更严重。
不确定NHibernate是否真的支持这样的映射,或者是否有一些解决方法或需要重新设计模型。任何想法都表示赞赏。
答案 0 :(得分:0)
我认为这里的问题不是映射而是模型
从逻辑上讲,我认为在B
课程中收集Group
会更有意义
(IEnumerable<B> ObjectsInGroup
)
使用LINQ ObjectsInGroup.Where(b => b.Name == "blah");
可以轻松搜索对象的名称
这样你的映射就会简单得多,你的类也更容易理解。