Создать базу данных из файлов конфигурации NHibernate - PullRequest
9 голосов
/ 11 января 2009

Можно ли сгенерировать таблицы базы данных и классы c # из файлов конфигурации NHibernate? После этого возможно ли изменять файлы конфигурации и обновлять таблицы и файлы конфигурации неразрушающим образом?

Вы рекомендуете какие-либо инструменты для этого? (желательно бесплатно ...)

Ответы [ 3 ]

14 голосов
/ 09 августа 2009

Как упомянул Иоахим, вам нужен параметр "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 голосов
/ 11 января 2009

проверьте настройку "hbm2ddl.auto" (в конфигурации или NHibernate.Cfg.Configuration). с помощью команды «create» вы можете воссоздать всю схему базы данных из ваших отображений, а параметр «update» должен просто обновить вашу схему.

2 голосов
/ 11 января 2009

Да, можно генерировать таблицы базы данных и классы C # из файлов конфигурации NHibernate. Позвольте мне объяснить с этим примером здесь.

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: Просто взглянув на файл конфигурации, вы обращаетесь к объекту, который выглядит так:

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: И снова, если вы посмотрите на свойство имени «Столбец» и его тип данных, который на самом деле ссылается на таблицу базы данных Actual backend, которая называется «Адрес».

Существует также огромное количество инструментов, которые помогут вам сгенерировать все эти артефакты для вас на основе различных входных данных, таких как UML, или схема фактической базы данных и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...