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.