NHibernate:如何设置作为组件属性的Id

时间:2012-06-10 14:08:03

标签: nhibernate fluent-nhibernate generator

我想设置(通过Fluent NHibernate)生成的ID:已分配。 映射的Id是一个属性,它包含在实体内部的组件中,如下所示:

public class Group
{
    public Group()
    {
    }

    public Group(GroupIdentifier identifier)
    {
       GroupIdentifier = identifier;
    }

    [DataMember]
    public virtual GroupIdentifier GroupIdentifier { get; set; }

    [DataMember]
    public virtual IList<X> Objects { get; set; }
}

public class GroupIdentifier
{
    protected ProtectionGroupIdentifier()
    {
    }

    [DataMember]
    public virtual Guid GroupGuid 
    { get; set; }

}

我使用以下代码来定义实体ID:

.Override<Group>(obj => obj.Id(x => x.GroupIdentifier.GroupGuid).GeneratedBy.Assigned())

当我尝试保存实体时,我收到以下错误: 扔了例外。 NHibernate.PropertyNotFoundException:NHibernate.PropertyNotFoundException:无法在类中找到属性'GroupGuid'的getter ...

如果我将GroupGuid移动到Group Entity并设置Id - 它正在运行。 但我需要在GroupIdentifier组件中。 请指教。

1 个答案:

答案 0 :(得分:2)

将GroupGuid封装在GroupIdentifier类中后,您不再映射guid类型,而是自定义类型。 NHibernate需要知道如何将该自定义类型映射到数据库。你需要告诉它如何使用NHibernate custom value type

要了解有关NHibernate类型系统的更多信息,请阅读this article。 Google搜索可以为您提供additional information

但是,由于您打算将它用于ID属性,因此最好仔细检查您的要求:Using custom type for the id property。显然这不是一个好主意。