我一直在寻找一个这样的例子,但这似乎很少见。希望一些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字段?
答案 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);
});
}
但是你不能查询(列出所有)标签,因为它是一个值对象。