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