有沒有可能在不使用Id的情況下在NHibernate中進行映射?沒有Id的NHibernate映射
我想要做的是,通過調用
session.CreateSqlQuery(myQuery).AddEntity(typeof(MyEntity));
程序存儲過程是一個聚合並沒有返回沒有ID字段,但我還是想利用NHibernate的映射數據返回到實體中。到目前爲止我唯一想到的是讓程序添加一個字段「O as Id」或其他東西,並讓該實體具有僞造的Id字段。
有沒有可能在不使用Id的情況下在NHibernate中進行映射?沒有Id的NHibernate映射
我想要做的是,通過調用
session.CreateSqlQuery(myQuery).AddEntity(typeof(MyEntity));
程序存儲過程是一個聚合並沒有返回沒有ID字段,但我還是想利用NHibernate的映射數據返回到實體中。到目前爲止我唯一想到的是讓程序添加一個字段「O as Id」或其他東西,並讓該實體具有僞造的Id字段。
我發現這真的不可能。從存儲過程返回的數據也必須有一個Id。它的工作原理是創建一個帶有Id和對象的虛擬屬性的虛擬列,但我只是決定手動將NHibernate返回的數據轉換爲對象。
基本上,你不應該在NHibernate中使用存儲過程。它畢竟是一個ORM。就我而言,我別無選擇,只能使用該程序。
我需要仔細檢查xsd,但我相信id或composite-id是必需的。但是,根據文檔,名稱不是必需的。所以,你應該能夠指定一個幾乎空白的ID部分。
在類似的情況下,我將類設置爲mutable =「false」,並將id映射到行索引,並將id映射中的生成器設置爲分配。
即使您的實體沒有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>
但是,你必須重載equals()和GetHashCode()在你的模型:
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();
}
}
好的 - 啞巴的問題。如何映射到行索引?這在映射文件中看起來如何?我們在文檔中找到了這個,並決定提問。 – ferventcoder 2009-06-26 16:45:24