【问题标题】:NHibernate, property implements interface, can we populate from multiple tables?NHibernate,属性实现接口,我们可以从多个表中填充吗?
【发布时间】:2011-12-15 01:17:30
【问题描述】:

使用 NHibernate 和 Fluent 映射。

我们有一个实现接口 (IGroupable) 的类 (GroupAssignment) 的属性 (Groupable)。同一类的另一个属性是枚举 (ItemType),它指定 IGroupable 的来源,即哪个表。

我们能否映射此配置,以便 NHibernate 填充 IGroupable 属性,并根据 Enum 鉴别器链接到正确的表?如果是这样,我们怎样才能做到这一点?

请注意 IGroupable 属性与 GroupAssignment 类是一对一的关系。

public class GroupAssignment
{
    public virtual new long ID { get; private set; }
    public virtual Group Group { get; set; }
    public virtual TypeEnum.TypeGroupItem ItemType { get; set; }
    public virtual IGroupable Groupable { get; set; }
}

理想情况下,NHibernate 应该从
获取 IGroupable 当 ItemType == 表 A 时,表 A,
TableB 当 ItemType == TableB 等时。

我还应该补充一点,由 ItemType 枚举指向的每个表都映射到实现 IGroupable 接口的类。

【问题讨论】:

    标签: c# nhibernate interface fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    您可以通过<any> 实现此目的。你甚至不需要枚举; NHibernate 会根据具体的 Groupable 设置正确的鉴别器。

    查看5.2.4. Any type mappings

    【讨论】:

    • 我不确定如何映射到 Fluent 中的不同类(表)。我们是否需要为每个定向到的类添加一个元值?
    • 忽略我的最后一条评论,因为我已经能够使用“任何”映射正确地映射它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2016-07-24
    • 2015-11-10
    • 1970-01-01
    • 2018-04-04
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多