chiname

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

用Powerdesigner生成NHebernate的MAP文件

昨天通过修改Powerdesigner的配置文件实现特殊的C#代码生成要求后,今天突然想到:如果能够在Powerdesigner中直接生成Map文件,那就比较爽了。   

下午试了一会,发现完全可行,其具体方式是
在Profile\Classifier\Generated Files下添加一项,如hbm.xml,该项设置为
文件名:%topContainerCode%.hbm.xml
说明 :
                  .if (%isGenerated%)
                        .set_object(_usingContext,,new)
                       [\ %NHebernateHead%\n]\
                      %NHebernateBody% \n
                      %NHebernateFoot%
                   .endif    
设置变量的值,如将 %NHebernateBody%设置为:
<class name="%MyClassPathName%.%Parent.path%, %MyClassPathName%" table="%Parent.path%"> \n
      .foreach_item(Attributes)
        .if(%code%==%myPrimaryKey%)
   <id name="%code%" column="%code%" type="String">
    <generator class="assigned" />
   </id>  \n
      .endif
        .if (%dataType%=="string")
   <property name="%code%" column="%code%" type="String" /> \n
       .endif
       .if (%dataType%=="int")
   <property name="%code%" column="%code%" type="Int32" /> \n
       .endif
      .next
</class>   
(数据类型的转换部分可以自己加上)

设置完成,在Project文件中添加对这些文件的引用。
将Profile\BasePackage\Templates\VisualStudio.NET\ProjectSourceFiles设置为:
.// Declare classifiers of the package
.foreach_item(Classifiers,,,%IsShortcut%==false)
   .if (%IsSelected%) and (%isInner% == false)
<File
    RelPath = "%sourceFilePath%"
    SubType = "Code"
    BuildAction = "Compile"
/>
<File
    RelPath = "%Parent.path%\\%topContainerCode%.hbm.xml"
    BuildAction = "EmbeddedResource"
/>
   .endif(\n)
.next
.// Declare classifiers of the subpackages
.foreach_item(Packages,,,%IsShortcut%==false)
   .if (%isAssembly% == false)
%ProjectSourceFiles%
   .endif
.next

搞定!


      

posted on 2004-05-28 19:33 wljcan 阅读(5154) 评论(31)  编辑 收藏

评论

# re: 用Powerdesigner生成NHebernate的MAP文件   

有没有办法扩展?做成一个插件的形式??
..不光Hibernate的配置文件可以搞定.别的也可以搞定~
2004-05-28 19:58 | hBifTs

# re: 用Powerdesigner生成NHebernate的MAP文件   

这是在powerdesigner提供的一个配置文件上做的修改,如果想更加灵活,可以使用 ole的方式对其进行编程,在powerdesigner中提供了C#调用powerdesigner的例子。
我觉得这种方式已经很方便很灵活了,没有必要做插件,如果要生成其它的数据,只要修改这个配置文件就行。 甚至你自己就可以写一个这样的配置文件。
2004-05-28 20:20 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

不错啊 
2004-05-28 21:13 | progame

# re: 用Powerdesigner生成NHebernate的MAP文件   

我自己也试着写了个根据Sql Server的表结构生成的,还比较简单,大家对这个思路怎么看?
http://blog.aspcool.com/tim/posts/159.aspx
2004-05-30 11:41 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

大家用的Powerdesigner版本是多少?
9?
2004-05-31 09:35 | 使名扬

# re: 用Powerdesigner生成NHebernate的MAP文件   

前段时间用的是9.5,刚刚升级到10,不过是试用版
2004-05-31 11:56 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

在哪儿可以下载到Powerdesigner 10?
2004-06-01 11:12 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

我是在0day下的,在www.sybase.com或者www.Quest.com(叫QDesigner)上应该可以下载的。
2004-06-01 13:37 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

请问如果在Nhibernate中要查询的话应该如何处理?
是用下面的方法吗?
IList lst;
ISession s = sessions.OpenSession();
ITransaction t = s.BeginTransaction();
lst = s.Find("from u in class users where u.name = ?","asd",NHibernate.Entity(typeof(users))
如果是的话,中间的条件如何设置?

谢谢!
2004-06-07 12:23 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

Powerdesigner 10已经下载,谢谢wljcan 。
2004-06-07 12:24 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

to 飞鹰
你那个查询语句写的有问题,要实现你想实现在查询,应该这样写:
lst = s.Find("from users as u where u.name = 'asd' ");
或者
lst = s.Find("from users as u where u.name = ?" ,"'asd'",NHibernate.NHibernate.String);

注意第二种写法的参数
IList Find(string query, object value, IType type);
type是value参数的类型,用来格式化query中的变量,而不是实体类型。
2004-06-07 15:05 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

@wljcan 
太感谢了,我折腾了一下午,现在终于好了。
2004-06-07 15:45 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

@wljcan :
请问下NHibernate中的DomainModel中的那些类和Map文件对应的SQL的表结构从哪儿获得?
2004-06-08 15:55 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

@飞鹰
不好意思,我不太明白你的意思 ,NHebernate我也只是刚刚开始用
2004-06-09 14:05 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

其实我主要是想搞清楚如果有几个关联表时该如何处理。根据它的单元测试代码,我们似乎可以用下面的方法取获得几个关联表的数据:
IList lst = s.Find("from Employee emp left join Department dep");
但是测试时,它总是扔出下面的错误信息:
"outer or full join must be followed by path expression"

为什么?
2004-06-10 15:09 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

我的PD9.5怎么在没有这个
Profile\BasePackage\Templates\VisualStudio.NET\ProjectSourceFiles
这个??在那里
2004-06-12 15:55 | jonescheng

# re: 用Powerdesigner生成NHebernate的MAP文件   

我用的是1.0版,在9.5中是没有这一项

to 飞鹰
关联表的问题,我也没有弄的太明白,过几天项目中要用到这一块,到时候仔细研究一下,再深入交流
2004-06-12 18:30 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

@wljcan 
好啊,我在最近的项目中也准备使用NHibernate,到时候一起研究研究。
2004-06-14 09:01 | 飞鹰

# re: 用Powerdesigner生成NHebernate的MAP文件   

myPrimaryKey
和MyClassPath
怎么定义的。能给我一份
C#.xol吗?谢谢了
cheng_wenjie@hotmail.com
2004-06-14 16:53 | joenscheng

# re: 用Powerdesigner生成NHebernate的MAP文件   

to joenscheng
已发
2004-06-14 19:19 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

楼主
myPrimaryKey 
和MyClassPath 
怎么定义的。能给我一份 
C#.xol吗?谢谢了 
iamygx@sina.com 
2004-07-02 08:27 | iamygx

# re: 用Powerdesigner生成NHebernate的MAP文件   

配置文件已经做了一些修改,现在基本上已经满足要求,目前存在的问题是:
1、因为在OO模型中,string没有长度,因此无法自动为MAP文件设置String的长度,默认为60。 (现在想到了一个方案解决,可是太麻烦)
2、在使用one-to-many时,只使用了 set,也就是IDictionary,没有用到数组和IList,大家可以根据自己的需要进行修改。

iamygx@sina.com ,我已经发到你邮箱了
2004-07-02 09:45 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

谢谢楼主
2004-07-02 13:31 | iamygx

# re: 用Powerdesigner生成NHebernate的MAP文件   

楼主,我现在使用middlegen2.0从数据库生成hbm.xml文件,然后从hbm.xml文件生成.java文件,但是这些java文件都只是典型的set和get方法。我想利用该工具生成一些别的方法:例如insert、update、query等。我琢磨了半天,也不知道在哪儿进行配置,现在请楼主帮忙。不胜感激
2004-07-28 17:20 | weimaojun

# re: 用Powerdesigner生成NHebernate的MAP文件   

to weimaojun

你可能对hibernate的结构还不是很了解,从hbm.xml从生成的代码是实体类,只用来描述实体中的数据,在hibernate架构中提供了对数据进行处理的方法,不需要你在这些类里添加 insert、update等方法。

多看看例子你就明白了。
2004-07-30 14:24 | wljcan

# re: 用Powerdesigner生成NHebernate的MAP文件   

我也是最近才使用nhibernat的,想找个工具自动生成hbm.xml,我对Power designer不 太熟,能不能把你的配置文件给我一份

并简单说说如何配

# re: 用Powerdesigner生成NHebernate的MAP文件   

caidehui@21cn.com

# re: 用Powerdesigner生成NHebernate的MAP文件   

好,希望与你一起探讨GTL语言,同时CSDN的POWERDESIGNER区也欢迎你
2004-10-28 10:36 | qiubole

# 能不能把你的配置文件给我一份   

能不能把你的配置文件给我一份 gangleader@126.com
2005-04-27 16:15 | 王建

# re: 用Powerdesigner生成NHebernate的MAP文件   

iadf
2005-04-29 14:10 | afa

# re: 用Powerdesigner生成NHebernate的MAP文件   

哪位有powerdesigner 10 的注册码吗.
请给我一个好吗.
我的E-mail: yzk406@163.com
posted on 2005-08-09 13:32  把我的欢乐带给你  阅读(1485)  评论(0编辑  收藏  举报