无Id的NHibernate映射

无Id的NHibernate映射,nhibernate,Nhibernate,是否可以在不使用Id的情况下在NHibernate中进行映射 我要做的是,使用 session.CreateSqlQuery( myQuery ).AddEntity( typeof( MyEntity ) ); 该过程是一个聚合,没有返回Id字段,但我仍然希望利用NHibernate将返回的数据映射到实体中。到目前为止,我唯一想到的是让过程添加一个字段“O as Id”或其他内容,并让实体有一个假Id字段。我需要再次检查xsd,但我认为需要Id或复合Id。但是,根据文档,名称不是必需的。因此

是否可以在不使用Id的情况下在NHibernate中进行映射

我要做的是,使用

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();
    }
}