从NHibernate配置文件生成数据库

时间:2009-01-11 01:25:30

标签: c# nhibernate

是否可以从NHibernate配置文件生成数据库表和c#类?之后,是否可以非破坏性地更改配置文件并更新表和配置文件?

您是否建议使用任何工具? (最好免费...)

3 个答案:

答案 0 :(得分:14)

正如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>

答案 1 :(得分:2)

是的,可以从NHibernate配置文件生成数据库表和C#类。让我在这里解释这个例子。

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>

第2步: 只需查看配置文件,您就可以使用Address对象siply,如下所示

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:如果您查看“Column”name属性及其数据类型,实际上是指名为“Address”的Actual后端数据库表。

还有大量工具可以帮助您根据不同的输入(如UML或实际数据库架构等)为您生成所有这些工件。

答案 2 :(得分:2)

查看“hbm2ddl.auto”设置(在配置或NHibernate.Cfg.Configuration中)。使用“创建”,您可以从映射中重新创建整个数据库模式,“更新”设置应该只更新您的模式。