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

Fluent nhibernate 如何在FluentNHibernate中使用外键映射ValueObject集合,fluent-nhibernate,Fluent Nhibernate,我一直在寻找这样一个例子,但它似乎很少见。希望一些尼伯纳特大师会知道 我有以下的类,根据我对价值对象的理解,它是一个价值对象。假设每个用户都能够为任何问题分配一个或多个标记。这些标记不需要主键,但它们确实包含对用户和问题的引用,这与我在那里看到的大多数ValueObjects示例不同 public class Tag : ValueObject { public virtual User User { get; set; } public virtual Question Q

我一直在寻找这样一个例子,但它似乎很少见。希望一些尼伯纳特大师会知道

我有以下的类,根据我对价值对象的理解,它是一个价值对象。假设每个用户都能够为任何问题分配一个或多个标记。这些标记不需要主键,但它们确实包含对用户和问题的引用,这与我在那里看到的大多数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; }
}
无论如何,我得到以下错误:

{实体“Tag”没有映射Id。请使用Id方法映射您的标识属性。例如:Idx=>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字段来处理这个问题?

试试这个:

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);
        });
    }
但您不能查询列出所有标记,因为它是一个值对象

试试这个:

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);
        });
    }
但您不能查询列出所有标记,因为它是一个值对象