【发布时间】:2009-01-11 01:25:29
【问题描述】:
是否可以从 NHibernate 配置文件生成数据库表和 c# 类?之后,是否可以非破坏性地更改配置文件并更新表和配置文件?
您是否推荐任何工具来做到这一点? (最好是免费的……)
【问题讨论】:
标签: c# nhibernate
是否可以从 NHibernate 配置文件生成数据库表和 c# 类?之后,是否可以非破坏性地更改配置文件并更新表和配置文件?
您是否推荐任何工具来做到这一点? (最好是免费的……)
【问题讨论】:
标签: c# nhibernate
正如 Joachim 所说,您正在寻找的是“hbm2ddl.auto”设置。
你可以这样设置:
var cfg = new NHibernate.Cfg.Configuration();
cfg.SetProperty("hbm2ddl.auto", "create");
cfg.Configure();
你也可以在你的 App.config 文件中设置它:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="hbm2ddl.auto">create</property>
【讨论】:
查看“hbm2ddl.auto”设置(在配置或 NHibernate.Cfg.Configuration 中)。使用“创建”,您可以从映射重新创建整个数据库架构,而“更新”设置应该只更新您的架构。
【讨论】:
是的,可以从 NHibernate 配置文件生成数据库表和 C# 类。让我在这里用这个例子来解释一下。
1 : 地址.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>
第 2 步: 只需查看配置文件,您的 Address 对象就如下所示
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
}
}
第 3 步:再次查看“列”名称属性及其数据类型,它实际上是指名为“地址”的实际后端数据库表。
还有大量工具可帮助您根据不同的输入(例如 UML、或实际数据库架构等)为您生成所有这些工件。
【讨论】: