【问题标题】:NHibernate: how to set Id that is a property in componentNHibernate:如何设置组件中的属性 ID
【发布时间】:2012-06-11 18:02:09
【问题描述】:

我想(通过 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 组件中需要它。 请指教。

【问题讨论】:

    标签: nhibernate fluent-nhibernate generator


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多