2009-01-11 7 views
9

Ist es möglich, die Datenbanktabellen und C# -Klassen aus NHibernate-Konfigurationsdateien zu generieren? Ist es danach möglich, die Konfigurationsdateien zu ändern und die Tabellen und Konfigurationsdateien nicht-destruktiv zu aktualisieren?Datenbank aus NHibernate-Konfigurationsdateien generieren

Empfehlen Sie irgendwelche Werkzeuge, um dies zu tun? (vorzugsweise frei ...)

Antwort

13

Wie von Joachim erwähnt, ist es die Einstellung "hbm2ddl.auto", nach der Sie suchen.

Sie können es wie folgt durch Code festgelegt:

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

Und Sie können es auch in Ihrer App.config-Datei festgelegt:

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

Ja, es ist möglich, die Datenbanktabellen und C# -Klassen aus den NHibernate-Konfigurationsdateien zu generieren. Lassen Sie mich mit diesem Beispiel hier erklären.

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> 

Schritt 2: Gerade durch die in der Konfigurationsdatei suchen, Sie Adresse Objekt siply wie folgt

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 
    } 
} 

Schritt 3 aussieht: Und erneut, wenn Sie die Eigenschaft "Column" name und seinen Datentyp betrachten, der sich tatsächlich auf die Tabelle "Actual" der Backend-Datenbank bezieht, die "Address" genannt wird.

Es gibt auch riesige Menge an Tools, die Ihnen helfen, für Sie basierend auf verschiedenen Eingangs wie UML, oder tatsächliche Datenbankschema usw.

2

, sich den „hbm2ddl.auto“ -Einstellung (in all diese Artefakte zu erzeugen Konfiguration oder NHibernate.Cfg.Configuration). Mit "create" können Sie das gesamte Datenbankschema aus Ihren Mappings neu erstellen und die "update" -Einstellung sollte nur Ihr Schema aktualisieren.