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. 对于新增的实体,使用这种方式还不错;如果是修改实体,还是得手工去修改实体类、配置文件、数据库。
效果预览:
示例实体如下:
![](https://images.cnblogs.com/cnblogs_com/riccc/arc_erdesign_01.gif)
![](https://images.cnblogs.com/cnblogs_com/riccc/arc_erdesign_02.gif)
生成的数据库脚本:
生成的实体类:
生成的NHibernate配置文件:
示例的使用:
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. 对于新增的实体,使用这种方式还不错;如果是修改实体,还是得手工去修改实体类、配置文件、数据库。
效果预览:
示例实体如下:
![](https://images.cnblogs.com/cnblogs_com/riccc/arc_erdesign_01.gif)
![](https://images.cnblogs.com/cnblogs_com/riccc/arc_erdesign_02.gif)
生成的数据库脚本:
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)
);
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
}
}
// ** 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>
<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>