【问题标题】:Generate Database from NHibernate config files从 NHibernate 配置文件生成数据库
【发布时间】:2009-01-11 01:25:29
【问题描述】:

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

您是否推荐任何工具来做到这一点? (最好是免费的……)

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        是的,可以从 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、或实际数据库架构等)为您生成所有这些工件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-23
          • 1970-01-01
          • 1970-01-01
          • 2010-11-20
          • 1970-01-01
          • 2013-03-29
          • 2012-02-24
          相关资源
          最近更新 更多