Es scheint, dass NHibernate ein ID-Tag als Teil des Mappings angegeben haben muss. Dies stellt für Ansichten ein Problem dar, da eine Ansicht nach meiner Erfahrung meistens keine ID hat. Ich habe Ansichten vorher in Nhibernate kartiert, aber so wie ich es gemacht habe, schien es mir unordentlich zu sein.Strategien zum Zuordnen von Ansichten in NHibernate
Hier ist ein erfunden Beispiel dafür, wie ich es gerade mache.
Mapping
<class name="ProductView" table="viewProduct" mutable="false" >
<id name="Id" type="Guid" >
<generator class="guid.comb" />
</id>
<property name="Name" />
<!-- more properties -->
</class>
Ansicht SQL
Select NewID() as Id, ProductName as Name, --More columns
From Product
Klasse
public class ProductView
{
public virtual Id {get; set;}
public virtual Name {get; set;}
}
ich für die p eine Id nicht brauchen Produkt oder im Falle einiger Ansichten habe ich möglicherweise keine ID für die Ansicht, je nachdem, ob ich die Kontrolle über die Ansicht habe
Gibt es eine bessere Möglichkeit, Ansichten auf Objekte in Nhibernate abzubilden?
bearbeiten
Antwort So Far
Mapping
<class name="ProductView" table="viewProduct" mutable="false" >
<id name="Id" type="Guid" />
<property name="Name" />
<!-- more properties -->
</class>
Klasse
public class ProductView
{
public virtual Name {get; set;}
//more properties
}
SQL anzeigen
Benötige ich noch NewID()?
Select NewID() as Id, ProductName as Name, --More columns
From Product
bedeutet das, dass ich die NewID() aus der TSQL-Auswahl entfernen kann, da sie nur dazu da ist, nhibernates Bedarf an einer ID zu erfüllen –
Nein, das bedeutet, dass Ihre Klasse keine Id-Eigenschaft benötigt. –
Ben hat Recht. NHibernate benötigt nicht, dass die ID einer Eigenschaft zugeordnet wird, aber sie muss immer eine Möglichkeit haben, persistente Instanzen zu identifizieren. –