Fork me on GitHub
Power Designer导出实体类和NHibernate xml文件

Power Designer导出实体类和NHibernate xml文件

今天研究了一下通过PowerDesigner生成实体类和NHibernate所需要的xml文件,方法是通过Power Designer的向对象模型 (OOM) 导出并配置相关模板,具体操作步骤如下:

第一步:创建OOM

在PowerDesigner中创建面向对象模型 (OOM)。

我首先创建物理数据模型 (PDM),然后在 Tools → Generate Object-Oriented Model 做了转换。

 

第二步:配置导出实体模板文件

菜单位置:Language → Edit Current Object Language

General:C# 2::Profile\Attribute\Templates\definition

我对模板进行了简单修改,添加了一行空格和 { get; set; }。又对文件头和字段描述的格式做了修改。

DefaultHeader

位置在:C# 2::Profile\Classifier\Templates\DefaultHeader

写自己的代码:

复制代码
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="%sourceFilename%" company="">
//   XXXX系统
// </copyright>
// <summary>
//   %Comment%
// </summary>
// --------------------------------------------------------------------------------------------------------------------
复制代码

 

[%comment%\n]\

位置在:C# 2::Profile\Shared\Templates\comment

写自己的代码:

/// <summary>
/// %CurrentLine%
/// </summary>

 

提示:在做类时只有把Comment字段填上,导出是才会有字段描述。

 

对命名空间进行配置,我直接写到了 source 里面感觉不是太合适。

C# 2::Profile\Classifier\Templates\source

 

现在就可以将实体导出了。

菜单位置:Language → Generate C# 2 Code

 

 

第二步:配置导出NHibernatedxml模板文件

 这个是通过在网上查资料学来的,

感谢:Powerdesigner生成NHebernate的MAP文件

只是他没有附图,让人找不到位置,我也研究了一个下午才找到的,以下参数命名仍采用他的。

 

1.还是打开 Object Language Properties

菜单位置:Language → Edit Current Object Language

在 C# 2::Profile\Classifier\Generated Files ,创建一个 hbm.xml 文件。

Name: hbm.xml

FileName:%topContainerCode%.hbm.xml

Comment:

.if (%isGenerated%)

.set_object(_usingContext,,new)

[\ %NHebernateHead%\n]\

%NHebernateBody% \n

%NHebernateFoot%

.endif  

%NHebernateBody%

 

2.设置%NHebernateBody%模板的内容

在 C# 2::Profile\Classifier\Templates ,新建一个模板 NHebernateBody

 

复制代码
<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="%Parent.path%" namespace="%Parent.path%">
  <class name="%sourceFilename%" table="%sourceFilename%" lazy="true" >
    <id name="ID" column="ID" type="Guid" >
      <generator class="assigned" />
    </id> \n    
    .foreach_item(Attributes)
      .if(%dataType% == "string")      
    <property name="%Code%" type="String">
      <column name="%Code%" /> 
    </property> \n       
    .endif
    .if(%dataType% == "int")
    <property name="%Code%" type="Int32">
      <column name="%Code%" /> 
    </property> \n       
    .endif
    .next   
  </class>
</hibernate-mapping>
复制代码

具体里面的配置我还没写好,需要再查帮助。

 

3.配置输出NHibernate的xml文件

在 C# 2::Profile\BasePackage\Templates\Visual Studio ,将模板修改为:

复制代码
.// Declare classifiers of the package
.foreach_item(Classifiers,,,%IsShortcut%==false)
   .if (%IsSelected%) and (%isInner% == false)
<File
    RelPath = "%sourceFilePath%"
    SubType = "Code"
    BuildAction = "Compile"
/>
<File
    RelPath = "%sourceFilePath%\\%topContainerCode%.hbm.xml"
    BuildAction = "EmbeddedResource"
/>
   .endif(\n)
.next
.// Declare classifiers of the subpackages
.foreach_item(Packages,,,%IsShortcut%==false)
   .if (%isAssembly% == false)
%ProjectSourceFiles%
   .endif
.next
复制代码

NHibernate的xml配置完成。最后,一起导出实体和NHibernate的.xml文件

菜单位置:Language → Generate C# 2 Code

 

 

生成的两个文件:Customers.cs 和 Customers.hbm.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="Customers.cs" company="">
//   XXXX系统
// </copyright>
// <summary>
//   账户信息
// </summary>
// --------------------------------------------------------------------------------------------------------------------
 
namespace XXXX.Domain.Model
{
   using System;
    
   /// <summary>
   /// 账户信息
   /// </summary>
   public class Customers
   {
       
      /// <summary>
      /// 账户ID
      /// </summary>
      public string customerId { get; set; }
       
      /// <summary>
      /// 账户名称
      /// </summary>
      public string customerName { get; set; }
       
      /// <summary>
      /// 性别
      /// </summary>
      public bool gender { get; set; }
       
      /// <summary>
      /// 地址
      /// </summary>
      public string address { get; set; }
       
      /// <summary>
      /// 电话号码
      /// </summary>
      public string phoneNumber { get; set; }
    
   }
}

 

复制代码
<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="" namespace="">
  <class name="Customers.cs" table="Customers.cs" lazy="true" >
    <id name="ID" column="ID" type="Guid" >
      <generator class="assigned" />
    </id> 
    <property name="CustomerId" type="String">
      <column name="CustomerId" /> 
    </property> 
    <property name="CustomerName" type="String">
      <column name="CustomerName" /> 
    </property> 
    <property name="Address" type="String">
      <column name="Address" /> 
    </property> 
    <property name="PhoneNumber" type="String">
      <column name="PhoneNumber" /> 
    </property> 
  </class>
</hibernate-mapping>
复制代码

今天的学习只是找到了实现方法,想要把模板做好,还要再看看帮助。

不怎么会写博客,望前辈批评指正。

另外对使用CodeSmith导出实体类和NHibernate做了研究。模板下载:NHibernate模板 和 我自己写的模板

本篇文章Word下载

 
 
 
posted on 2013-11-01 15:29  HackerVirus  阅读(982)  评论(0编辑  收藏  举报