2009-01-11 7 views
9

Est-il possible de générer les tables de base de données et les classes C# à partir des fichiers de configuration NHibernate? Ensuite, est-il possible de changer les fichiers de configuration et de mettre à jour les tables et les fichiers de configuration de manière non destructive?Générer la base de données à partir des fichiers de configuration NHibernate

Recommandez-vous des outils pour cela? (de préférence gratuit ...)

Répondre

13

Comme mentionné par Joachim, c'est le paramètre "hbm2ddl.auto" que vous recherchez.

Vous pouvez définir par code comme ceci:

var cfg = new NHibernate.Cfg.Configuration(); 
cfg.SetProperty("hbm2ddl.auto", "create"); 
cfg.Configure(); 

Et vous pouvez également définir dans votre fichier App.config:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="hbm2ddl.auto">create</property> 
2

Oui, il est possible de générer les tables de base de données et les classes C# à partir des fichiers de configuration NHibernate. Laissez-moi vous expliquer avec cet exemple ici.

1: Address.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> 

<hibernate-mapping 
    xmlns="urn:nhibernate-mapping-2.0" 
    default-cascade="none"> 

    <class 
     name="Your.Domain.AddressImpl, Your.Domain" 
     table="[ADDRESS]" 
     dynamic-insert="true" 
     dynamic-update="true" 
     lazy="true"> 

     <id name="Id" type="long" unsaved-value="0"> 
      <column name="ID" sql-type="NUMERIC(19,0)"/> 
      <generator class="native">   </generator> 
     </id> 



     <property name="Address1" type="string"> 
      <column name="ADDRESS1" not-null="true" unique="false" sql-type="VARCHAR(100)"/> 
     </property> 

     <property name="Address2" type="string"> 
      <column name="ADDRESS2" not-null="true" unique="false" sql-type="VARCHAR(100)"/> 
     </property> 

     <property name="City" type="string"> 
      <column name="CITY" not-null="true" unique="false" sql-type="VARCHAR(100)"/> 
     </property> 

     <property name="State" type="string"> 
      <column name="STATE" not-null="true" unique="false" sql-type="VARCHAR(100)"/> 
     </property> 

     <property name="Zipcode" type="string"> 
      <column name="ZIPCODE" not-null="true" unique="false" sql-type="VARCHAR(100)"/> 
     </property> 




    </class> 
</hibernate-mapping> 

Étape 2: Juste en regardant le fichier de configuration, vous Adresse Objet ressemble siply comme le

using System; 

namespace Your.Domain 
{ 

    public partial class Address 
    { 



     #region Attributes and Associations 

     private string _address1; 
     private string _address2; 
     private string _city; 
     private long _id; 
     private string _state; 
     private string _zipcode; 

     #endregion 

     #region Properties 

     /// <summary> 
     /// 
     /// </summary> 
     public virtual string Address1 
     { 
      get { return _address1; } 
      set { this._address1 = value; } 
     } 

     /// <summary> 
     /// 
     /// </summary> 
     public virtual string Address2 
     { 
      get { return _address2; } 
      set { this._address2 = value; } 
     } 

     /// <summary> 
     /// 
     /// </summary> 
     public virtual string City 
     { 
      get { return _city; } 
      set { this._city = value; } 
     } 

     /// <summary> 
     /// 
     /// </summary> 
     public virtual long Id 
     { 
      get { return _id; } 
      set { this._id = value; } 
     } 

     /// <summary> 
     /// 
     /// </summary> 
     public virtual string State 
     { 
      get { return _state; } 
      set { this._state = value; } 
     } 

     /// <summary> 
     /// 
     /// </summary> 
     public virtual string Zipcode 
     { 
      get { return _zipcode; } 
      set { this._zipcode = value; } 
     } 


     #endregion 
    } 
} 

Étape 3 suivante: Et encore une fois si vous regardez la propriété de nom "Colonne" et son type de données qui fait référence à la table de base de données backend réelle appelée "Adresse".

Il y a aussi énorme quantité d'outils qui vous aident à générer tous ces artefacts pour vous en fonction des commentaires différents, tels que UML, ou réel schéma de base de données, etc.

2

vérifier la « hbm2ddl.auto » réglage (en configuration ou NHibernate.Cfg.Configuration). Avec "créer", vous pouvez recréer le schéma de base de données complet à partir de vos mappages et le paramètre "mise à jour" devrait simplement mettre à jour votre schéma.

Questions connexes