Sembra che NHibernate abbia bisogno di avere un tag id specificato come parte della mappatura. Questo presenta un problema per le visualizzazioni come la maggior parte delle volte (nella mia esperienza) una vista non avrà un ID. Ho mappato le viste in precedenza in nhibernate, ma il modo in cui l'ho fatto sembrava essere disordinato per me.Strategie per mappare le viste in NHibernate
Ecco un inventato esempio di come lo sto facendo attualmente.
Mapping
<class name="ProductView" table="viewProduct" mutable="false" >
<id name="Id" type="Guid" >
<generator class="guid.comb" />
</id>
<property name="Name" />
<!-- more properties -->
</class>
Visualizza SQL
Select NewID() as Id, ProductName as Name, --More columns
From Product
Classe
public class ProductView
{
public virtual Id {get; set;}
public virtual Name {get; set;}
}
Non ho bisogno di un ID per la p roduct o nel caso di alcuni punti di vista, potrei non avere un ID per la vista, a seconda se ho il controllo sulla vista
Esiste un modo migliore per mappare le viste sugli oggetti in nibernetico?
Modifica
risposta So Far
Mapping
<class name="ProductView" table="viewProduct" mutable="false" >
<id name="Id" type="Guid" />
<property name="Name" />
<!-- more properties -->
</class>
Classe
public class ProductView
{
public virtual Name {get; set;}
//more properties
}
Visualizza SQL
Ho ancora bisogno di NewID()?
Select NewID() as Id, ProductName as Name, --More columns
From Product
significa che posso rimuovere NewID() da TSQL Select poiché è lì solo per soddisfare la necessità di nhibernate su un ID –
No, significa che la classe non ha bisogno di una proprietà Id. –
Ben ha ragione. NHibernate non ha bisogno che l'ID sia mappato su una proprietà, ma ha sempre bisogno di un modo per identificare le istanze persistenti. –