1

我想(通过 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”的吸气剂...

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

4

1 回答 1

2

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

要了解有关 NHibernate 类型系统的更多信息,请阅读这篇文章。谷歌搜索可以为您提供更多 信息

但是,由于您计划将其用于 ID 属性,因此您最好仔细检查您的要求:为 id 属性使用自定义类型。显然这不是一个好主意。

于 2012-06-10T21:26:10.423 回答