【问题标题】:Fluent nHibernate Mapping HasMany Composite Key with Fixed ValueFluent nHibernate 映射 HasMany 具有固定值的复合键
【发布时间】:2012-08-31 16:31:40
【问题描述】:

我正在尝试为现有的大型系统实现 nHibernate 映射。 试图映射两个对象之间的关系。一个对象是“附件”,它与系统中的许多不同对象有关。所以在数据库中它有两列用于关联自身

物品类型

物品编号

如果我有一个带有附件的产品,那么 ProductId = ItemId 和 ItemType 将是一个预定义的值,例如'0001' 其中 User 对象可能是 '0002',Order 可能是 '0003' 等等其他 ItemTypes。

现在我需要在 nhibernate 中映射它。所以我想在产品对象上有一个附件集合,但这意味着将它映射到 ItemId 和 ItemType

如果只是需要的 ItemId 映射,它可以做到

HasMany(x => x.Attachments).KeyColumn("ProductId");

但我需要将其映射到附件表中 KeyColumn“ProductId”和 ItemType 等于“0001”的位置

我该怎么办?

结构产品表

[产品]

产品编号

名字

说明

附表

[附件]

附件网址

物品编号

物品类型

【问题讨论】:

    标签: c# .net fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    我要做的是创建一个基本的抽象附件类型,如下所示:

    public abstract class Attachment
    {
        public TYPE AttachmentURL { get; set; }
    }
    

    然后为每个附件“类型”创建一个子类:

    public class ProductAttachment : Attachment
    {
        protected ProductAttachment() { }
    
        public ProductAttachment(Product parent)
        {
            Parent = parent;
        }
    
        public Product Parent { get; protected set; }
    }
    

    然后,在您的附件映射中,您将包含以下行:

    DiscriminateSubClassesOnColumn("ItemType");
    

    然后为每个子类映射添加一个“DiscriminatorValue”调用。例如:

    // Inside ProductAttachment mapping
    ...
    DiscriminatorValue("0001");
    ...
    

    然后,像往常一样映射所有内容。这带来了额外的好处,即您的产品将有一个“ProductAttachment”列表,这将要求“父级”是一个产品。

    从数据库中仅获取基本类型“附件”(而不是“产品附件”)可能会有些奇怪,但当/如果它出现时,您可以跨过那座桥。

    【讨论】:

    • 谢谢,当我在其他地方找到一个简单的解决方案时,我正要尝试这个。
    【解决方案2】:

    在这里找到答案

    Fluent Nibernate putting a where clause in the mapping

    我可以像这样对映射进行硬编码

    HasMany(x => x.Children).Where("ItemType='0001'");
    

    【讨论】:

    • 我不是 100% 确定,但我认为如果你这样做,你必须确保在插入新附件时手动指定 ItemType 值。拉取附件没问题,但插入附件会将其设置为 a.) null b.) 默认值(如果已指定)或 c.) 导致错误,因为该列不可为空且未指定默认值。
    • 谢谢,我还没来得及测试插入,但我会记住这一点!
    猜你喜欢
    • 2012-04-03
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2013-09-01
    • 2013-04-24
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多