如何在FluentNHibernate中使用外键映射ValueObject集合

时间:2010-12-04 03:26:02

标签: fluent-nhibernate

我一直在寻找一个这样的例子,但这似乎很少见。希望一些NHibernate大师会知道。

我有以下类,根​​据我对Value Objects的理解,它是一个Value Object。假设每个用户都能够为任何问题分配一个或多个标签(想想Stack Overflow)。标签不需要主键,但它们确实包含对用户和问题的引用,这与我在那里看到的大多数ValueObjects的例子不同。

public class Tag : ValueObject
{
     public virtual User User { get; set; }
     public virtual Question Question { get; set; }
     public virtual string TagName { get; set; }
}

public class User 
{
     public virtual IList<Tag> Tags { get; set; }
}

public class Question
{
     public virtual IList<Tag> Tags { get; set; }
}

无论如何,我收到以下错误:

{“实体'标签'没有ID映射。使用Id方法映射您的标识属性。例如:Id(x =&gt; x.Id)。”}

我有以下用户和问题的Fluent NHibernate映射:

public void Override(AutoMapping<XXX> mapping)
        {
            mapping.HasMany(x => x.Tags).Component(c =>
            {
                c.Map(x => x.TagName);
                c.Map(x => x.Question);
                c.Map(x => x.User);
            });
        }

一如既往,任何想法都非常感激。

延迟更新:好的,也许这可能不是一个价值对象。它不需要身份,但我想这也不是可以在多个地方使用的东西。有没有办法处理这个问题而不强迫我的对象上有无用的Id字段?

1 个答案:

答案 0 :(得分:0)

试试这个:

public void Override(AutoMapping<XXX> mapping)
    {
        mapping.HasMany(x => x.Tags).AsBag().Component(c =>
        {
            c.Map(x => x.TagName);
            c.References(x => x.Question);
            c.References(x => x.User);
        });
    }

但是你不能查询(列出所有)标签,因为它是一个值对象。

相关问题