Richie

Sometimes at night when I look up at the stars, and see the whole sky just laid out there, don't you think I ain't remembering it all. I still got dreams like anybody else, and ever so often, I am thinking about how things might of been. And then, all of a sudden, I'm forty, fifty, sixty years old, you know?

ER Studio设计模型 代码生成

    使用ER Studio进行Model设计,用它的宏生成数据库创建脚本和实体类文件。示例文件:点击下载
    示例的使用:
    1. 用ER Studio 6.5打开example.dm1
    2. 打开菜单 Tools -> Basic Macro Editor
    3. 在C:\盘创建Schema目录(数据库脚本和实体类文件将放在这个目录下)
    4. 在Basic Macro Editor中分别打开ClassAndMapping.bas、OracleSQL.BAS,点击运行按钮。运行成功后,在C:\Schema目录下面可以看到生成的文件
    5. 只是对当前活动状态的(当前被选择的)Sub Model进行生成操作,所以如果建立了多个Sub Model,分别对各个Sub Model执行一次生成操作。或者修改ClassAndMapping.bas、OracleSQL.BAS这两个宏,对全部的Sub Model一次进行

    其它说明:
    1. 在ER Studio的Logical Model中设计实体类。类名取Entity Name,table名取Table Name;类的属性名字取Attribute Name,表的列名取Default Column Name。
    2. 生成的数据库脚本为Oracle9i的SQL,示例将生成使用NHibernate时的实体类和配置文件。
    3. 没有处理实体之间的关系,生成的实体类和NHibernate配置文件必须根据需要做相应修改,数据类型只给出了几种示例,如果要处理其它数据类型,根据需要对ClassAndMapping.bas、OracleSQL.BAS这两个宏进行修改。
    4. 关于扩展:a) 在Basic Macro Editor中编辑时,可以看到ER Studio各个对象的属性、方法,这样你可以了解每个ER Studio对象,另外ER Studio的Macros中有很多宏的示例,可以参考,你还可以使用脚本创建Word、Excel对象,生成数据字典文件等;b) 数据类型方面,可以对ClassAndMapping.bas、OracleSQL.BAS进行修改,以满足自己的需要,还可以在ER Studio中使用User Datatypes(用户定义的数据类型),扩充、规范实体属性类型;c) 如果需要在生成的类、配置文件中处理实体关系,可以自行扩展ClassAndMapping.bas、OracleSQL.BAS实现这个功能。
    5. 对于新增的实体,使用这种方式还不错;如果是修改实体,还是得手工去修改实体类、配置文件、数据库。

    效果预览:
    示例实体如下:
   
   

    生成的数据库脚本:
Drop Table TblOrder Cascade Constraints;
Create Table TblOrder (
    ord_id  Number(
8,0Default -1 Not Null,
    ord_number  Nvarchar2(
16Default ' ' Not Null,
    ord_date Date
Default sysdate Not Null,
    ord_total_amount  Number(
18,5Default 0 Not Null,
    ord_approved  Number(
1,0Default 0 Not Null
Constraint PK_TblOrder Primary Key (ord_id)
);

    生成的实体类:
//*******************************************
// ** Description:  Data Access Object for Order
// ** Author     :  Code generator
// ** Created    :   2007-6-25 0:07:54
// ** Modified   :
//*******************************************

namespace ThoughtSoft.APO.Example
{
    
using System;

    
/// <summary>
    
/// Data Access Object for Order
    
/// </summary>
    public class  OrderDao
    {
        
private int _orderId;
        
private string _orderNumber;
        
private DateTime _orderDate;
        
private decimal _totalAmount;
        
private bool _isApproved;

        
/// <summary>
        
/// default constructor for Order
        
/// </summary>
        public OrderDao()
        {
        }

        
/// <summary>
        
/// OrderId
        
/// </summary>
        public virtual int OrderId{
            
get { return this._orderId; }
            
set { this._orderId = value; }
        }

        
/// <summary>
        
/// OrderNumber
        
/// </summary>
        public virtual string OrderNumber{
            
get { return this._orderNumber; }
            
set { this._orderNumber = value; }
        }

        
/// <summary>
        
/// OrderDate
        
/// </summary>
        public virtual DateTime OrderDate{
            
get { return this._orderDate; }
            
set { this._orderDate = value; }
        }

        
/// <summary>
        
/// TotalAmount
        
/// </summary>
        public virtual decimal TotalAmount{
            
get { return this._totalAmount; }
            
set { this._totalAmount = value; }
        }

        
/// <summary>
        
/// IsApproved
        
/// </summary>
        public virtual bool IsApproved{
            
get { return this._isApproved; }
            
set { this._isApproved = value; }
        }

        
#region override methods
        
/// <summary>
        
///
        
/// </summary>
        
/// <returns></returns>
        public override string ToString()
        {
            
return _orderId.ToString();
        }
        
/// <summary>
        
///
        
/// </summary>
        
/// <returns></returns>
        public override int GetHashCode()
        {
            
return _orderId.GetHashCode();
        }
        
/// <summary>
        
///
        
/// </summary>
        
/// <returns></returns>
        public override bool Equals(object obj)
        {
            
bool result = false;
            
if (obj is OrderDao)
            {
                result 
= (_orderId == (obj as OrderDao).OrderId);
            }
            
return result;
        }
        
#endregion
    }
}

    生成的NHibernate配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
        namespace
="ThoughtSoft.APO" assembly="thoughtsoft.APO">
    
<class name="OrderDao" table="TblOrder">
        
<id name="OrderId" >
            
<column name="ord_id" sql-type="number(8,0)" not-null="true"/>
            
<generator class="assigned" />
        
</id>
        
<property name="OrderNumber" >
            
<column name="ord_number" sql-type="nvarchar2" length="16" not-null="true"/>
        
</property>
        
<property name="OrderDate" >
            
<column name="ord_date" sql-type="date" not-null="true"/>
        
</property>
        
<property name="TotalAmount" >
            
<column name="ord_total_amount" sql-type="number(18,5)" not-null="true"/>
        
</property>
        
<property name="IsApproved" >
            
<column name="ord_approved" sql-type="number(1,0)" not-null="true"/>
        
</property>
    
</class>
</hibernate-mapping>

posted on 2007-06-25 00:02  riccc  阅读(5043)  评论(7编辑  收藏  举报

导航