我想设置(通过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组件中。 请指教。
答案 0 :(得分:2)
将GroupGuid封装在GroupIdentifier类中后,您不再映射guid类型,而是自定义类型。 NHibernate需要知道如何将该自定义类型映射到数据库。你需要告诉它如何使用NHibernate custom value type。
要了解有关NHibernate类型系统的更多信息,请阅读this article。 Google搜索可以为您提供additional information。
但是,由于您打算将它用于ID属性,因此最好仔细检查您的要求:Using custom type for the id property。显然这不是一个好主意。