Stratégies pour la Cartographie des points de Vue dans NHibernate
Il semble que NHibernate doit avoir un id tag spécifié dans le cadre de la cartographie. Cela pose un problème pour la vue que la plupart du temps (dans mon expérience) ne sera pas avoir une carte d'identité. J'ai mappé point de vue avant dans nhibernate, mais ils que j'ai fait, il semblait être compliqué pour moi.
Ici est un artificiel exemple de la façon dont je le fais actuellement.
Cartographie
<class name="ProductView" table="viewProduct" mutable="false" >
<id name="Id" type="Guid" >
<generator class="guid.comb" />
</id>
<property name="Name" />
<!-- more properties -->
</class>
Vue 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;}
}
Je n'ai pas besoin d'un Id pour le produit ou, dans le cas de certains points de vue, je ne peut pas avoir un id pour la vue, en fonction de si j'ai le contrôle sur la Vue
Est-il une meilleure façon de mappage des vues d'objets dans nhibernate?
Modifier
Réponse Jusqu'À Présent
Cartographie
<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
}
Vue SQL
Dois-je encore besoin de NewID()?
Select NewID() as Id, ProductName as Name, --More columns
From Product
OriginalL'auteur Nathan Fisher | 2010-06-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire juste un peu plus propre par pas de cartographie de l'Id d'une propriété et en omettant le générateur:
De cette façon, vous gardez le problème dans la couche de données, sans une fuite de la mise en œuvre des détails à votre domaine.
Non, cela signifie que votre classe n'a pas besoin d'un Id de propriété.
Ben du droit. NHibernate n'a pas besoin de l'Id d'être relié à une propriété, mais il a toujours besoin d'un moyen d'identifier les instances persistantes.
merci Diego, Ben. Ok, nous allons voir si je comprends bien. J'ai besoin d'inclure l'id de la balise dans le mapping, je n'ai pas besoin d'un Id de propriété dans ma classe. Dois-je alors besoin de la nécessité de la fonction newid() dans le cadre de sql ou peut-être que le larguaient ainsi et nhibernate attribuera un guid?
Vous avez encore besoin de la fonction newid(); NHibernate ne pouvez attribuer des Id sur enregistrer, non pas sur la charge.
OriginalL'auteur Diego Mijelshon
Autant que je sache, NHibernate aurez besoin soit d'un id ou un composite-id définition puisque c'est le mécanisme par lequel il identifie de manière unique un enregistrement donné. Si il n'y a pas de combinaison de colonnes qui fournit une clé pour chaque ligne dans la vue, je pense que vous êtes coincé avec hacky solutions de contournement.
mutable=false
que le besoin explicite pour un Id s'en va. pas sûr si c'est pratique mais ferait de tels scénarios plus facile à manipuler, de l'omi.OriginalL'auteur Ben Hoffstein