ER Studio设计模型 代码生成

介绍如何使用ERStudio及宏文件自动生成Oracle数据库创建脚本、实体类及NHibernate配置文件,适用于快速生成数据库及实体映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    使用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 , 0 Default   - 1   Not   Null ,
    ord_number  Nvarchar2(
16 Default   '   '   Not   Null ,
    ord_date Date
Default  sysdate  Not   Null ,
    ord_total_amount  Number(
18 , 5 Default   0   Not   Null ,
    ord_approved  Number(
1 , 0 Default   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 >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值