2009-11-26 12 views
3

Quand je mapper des colonnes de la table inspectée, je fais cela:NHibernate cartographie de la propriété: colonnes et formule

<property name="InstanceName" type="MyNameUserType, MyApp.MyNamespace"> 
    <column name="Name"/> 
    <column name="Name2"/> 
</property> 

Comment puis-je faire la cartographie de la propriété initialiser un UserType avec des données récupérées par la requête SQL de la formule?

<property name="InstanceName" type="MyNameUserType, MyApp.MyNamespace" formula="(...)"/> 

échoue avec une exception "mauvais nombre de colonnes".

Merci d'avance! MyUserNameType doit être un mappage de niveau classe afin que vous puissiez mapper le résultat de la fonction SQL à une classe.

Répondre

1

Voir ces deux postes pour une possible aide:

  1. classe et par exemple SQL Fonction: http://thoughtspam.spaces.live.com/blog/cns!253515AE06513617!478.entry

  2. NHibernate Mapping avec exemple de cartographie de formule: http://thoughtspam.spaces.live.com/blog/cns!253515AE06513617!477.entry

+0

merci pour votre réponse. J'ai essayé comme vous l'avez fait dans post2 mais ça ne m'a rien donné. ressemble à UserType ne voit aucune colonne de l'ensemble de données résultant :( – npeBeg

+7

Le lien affiché ne fonctionne pas pour moi –

+2

Ce message a plus d'un an Je ne contrôle pas les internets Manière d'utiliser ce premier vote vers le bas ! –

1

Je suis l'auteur de les articles référencés par Michael. Je n'avais aucune idée des gens qui étaient toujours intéressés et je ne suis pas sûr que ce soit applicable avec le dernier NHibernate. Voici un nouveau lien si: http://thoughtspam.wordpress.com/2007/12/19/nhibernate-property-with-formula/

exemple, en utilisant ... Northwind

Cartographie:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="PropertyFormulaExample.Shipper, PropertyFormulaExample" table="Shippers" lazy="false" > 
     <id name="ShipperID" column="ShipperID" unsaved-value="0"> 
      <generator class="native" /> 
     </id> 
     <property name="CompanyName" column="CompanyName" /> 
     <property name="Phone" column="Phone" /> 
    </class> 
</hibernate-mapping> 

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="PropertyFormulaExample.Order, PropertyFormulaExample" table="Orders" lazy="false"> 
     <id name="OrderID" column="OrderID" unsaved-value="0"> 
      <generator class="native" /> 
     </id> 
     <property name="CustomerID" column="CustomerID" /> 
     <property name="ShipVia" type="PropertyFormulaExample.Shipper, PropertyFormulaExample" formula="dbo.GetShipper(shipvia)" /> 
    </class> 
</hibernate-mapping> 

Entités:

public class Order 
{ 
    public int OrderID { get; set; } 
    public string CustomerID { get; set; } 
    public Shipper ShipVia { get; set; } 
} 

public class Shipper : ILifecycle 
{ 
    public int ShipperID { get; set; } 
    public string CompanyName { get; set; } 
    public string Phone { get; set; } 
    #region ILifecycle Members 
    public LifecycleVeto OnDelete(NHibernate.ISession s) 
    { 
     throw new NotImplementedException(); 
    } 
    public void OnLoad(NHibernate.ISession s, object id) 
    { 
    } 
    public LifecycleVeto OnSave(NHibernate.ISession s) 
    { 
     throw new NotImplementedException(); 
    } 
    public LifecycleVeto OnUpdate(NHibernate.ISession s) 
    { 
     throw new NotImplementedException(); 
    } 
    #endregion 

}

Et enfin le SQL fonction:

CREATE FUNCTION dbo.GetShipper(@shipperId int) 
RETURNS int 
AS 
BEGIN 
RETURN @shipperId 
END 

De toute évidence, vous voudrez que la fonction fasse quelque chose de significatif, mais l'idée est de retourner le PK pour l'entité et d'implémenter ILifecycle.

Questions connexes