visual tutorial studio net mvc framework asp c# nhibernate

c# - tutorial - nhibernate vs entity framework



Generar base de datos desde los archivos de configuraciĆ³n de NHibernate (3)

¿Es posible generar las tablas de la base de datos y las clases c # de los archivos de configuración de NHibernate? Después, ¿es posible cambiar los archivos de configuración y actualizar las tablas y los archivos de configuración de forma no destructiva?

¿Recomiendas alguna herramienta para hacer esto? (preferiblemente gratis ...)


revisa la configuración "hbm2ddl.auto" (en configuración o NHibernate.Cfg.Configuration). con "crear" puede volver a crear todo el esquema de la base de datos desde sus asignaciones y la configuración de "actualización" solo debe actualizar su esquema.


Como mencionó Joachim, es la configuración "hbm2ddl.auto" que está buscando.

Puedes configurarlo por código como este:

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

Y también puede configurarlo en su archivo App.config:

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


Sí, es posible generar las tablas de la base de datos y las clases de C # de los archivos de configuración de NHibernate. Déjame explicarte con este ejemplo aquí.

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>

Paso 2: con sólo mirar el archivo de configuración, el siply del objeto Dirección se parece al siguiente

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

Paso 3: Y de nuevo si observa la propiedad de nombre "Columna" y su tipo de datos que en realidad se refiere a la tabla de la base de datos Real backend llamada "Dirección".

También hay una gran cantidad de herramientas que te ayudan a generar todos estos artefactos en función de diferentes entradas, como UML, o el esquema de base de datos real, etc.