无Id的NHibernate映射
是否可以在不使用Id的情况下在NHibernate中进行映射 我要做的是,使用无Id的NHibernate映射,nhibernate,Nhibernate,是否可以在不使用Id的情况下在NHibernate中进行映射 我要做的是,使用 session.CreateSqlQuery( myQuery ).AddEntity( typeof( MyEntity ) ); 该过程是一个聚合,没有返回Id字段,但我仍然希望利用NHibernate将返回的数据映射到实体中。到目前为止,我唯一想到的是让过程添加一个字段“O as Id”或其他内容,并让实体有一个假Id字段。我需要再次检查xsd,但我认为需要Id或复合Id。但是,根据文档,名称不是必需的。因此
session.CreateSqlQuery( myQuery ).AddEntity( typeof( MyEntity ) );
该过程是一个聚合,没有返回Id字段,但我仍然希望利用NHibernate将返回的数据映射到实体中。到目前为止,我唯一想到的是让过程添加一个字段“O as Id”或其他内容,并让实体有一个假Id字段。我需要再次检查xsd,但我认为需要Id或复合Id。但是,根据文档,名称不是必需的。因此,您应该能够指定一个几乎为空的id部分
在类似的情况下,我将类设置为mutable=“false”,将id映射到行索引,并将id映射中的生成器设置为assigned。我发现这确实是不可能的。从存储过程返回的数据也必须具有Id。只需创建一个Id为的伪列和对象上的伪属性就行了,但我决定手动将NHibernate返回的数据转换为对象 基本上,您不应该对NHibernate使用存储过程。毕竟,这是一场恐怖袭击。在我的例子中,我别无选择,只能使用该过程。您的实体在某种程度上必须是“唯一的”,即使它没有Id字段 决定哪些属性组合在一起时必须是唯一的,并对它们使用复合键
<composite-id>
<key-property name="Property1" column="Column1"/>
<key-property name="Property2" column="Column2"/>
</composite-id>
来自@Andy McCluggage的帖子: 您可以在映射中执行以下操作:
<composite-id>
<key-property name="Property1" column="Column1"/>
<key-property name="Property2" column="Column2"/>
</composite-id>
好吧,愚蠢的问题。如何映射到行索引?在映射文件中是什么样子的?我们在文档中查找了这一点,并决定询问。
public class MyClass
{
public virtual DateTime Property1;
public virtual string Property2;
public virtual int SomeOtherProperty;
public override bool Equals(object obj)
{
if(obj == null)
return false;
var t = obj as MyClass;
if(t == null)
return false;
if (this.Property1 == t.Property1 && this.Property2 == t.Property2)
return true;
return false;
}
public override int GetHashCode()
{
return (this.Property1 + "|" + this.Property2).GetHashCode();
}
}