用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
搞定!
下午试了一会,发现完全可行,其具体方式是
在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
搞定!
评论
# re: 用Powerdesigner生成NHebernate的MAP文件
有没有办法扩展?做成一个插件的形式??..不光Hibernate的配置文件可以搞定.别的也可以搞定~
# re: 用Powerdesigner生成NHebernate的MAP文件
这是在powerdesigner提供的一个配置文件上做的修改,如果想更加灵活,可以使用 ole的方式对其进行编程,在powerdesigner中提供了C#调用powerdesigner的例子。我觉得这种方式已经很方便很灵活了,没有必要做插件,如果要生成其它的数据,只要修改这个配置文件就行。 甚至你自己就可以写一个这样的配置文件。
# re: 用Powerdesigner生成NHebernate的MAP文件
不错啊# re: 用Powerdesigner生成NHebernate的MAP文件
我自己也试着写了个根据Sql Server的表结构生成的,还比较简单,大家对这个思路怎么看?http://blog.aspcool.com/tim/posts/159.aspx
# re: 用Powerdesigner生成NHebernate的MAP文件
大家用的Powerdesigner版本是多少?9?
# re: 用Powerdesigner生成NHebernate的MAP文件
前段时间用的是9.5,刚刚升级到10,不过是试用版# re: 用Powerdesigner生成NHebernate的MAP文件
在哪儿可以下载到Powerdesigner 10?# re: 用Powerdesigner生成NHebernate的MAP文件
我是在0day下的,在www.sybase.com或者www.Quest.com(叫QDesigner)上应该可以下载的。# 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))
如果是的话,中间的条件如何设置?
谢谢!
# re: 用Powerdesigner生成NHebernate的MAP文件
Powerdesigner 10已经下载,谢谢wljcan 。# 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中的变量,而不是实体类型。
# re: 用Powerdesigner生成NHebernate的MAP文件
@wljcan太感谢了,我折腾了一下午,现在终于好了。
# re: 用Powerdesigner生成NHebernate的MAP文件
@wljcan :请问下NHibernate中的DomainModel中的那些类和Map文件对应的SQL的表结构从哪儿获得?
# re: 用Powerdesigner生成NHebernate的MAP文件
@飞鹰不好意思,我不太明白你的意思 ,NHebernate我也只是刚刚开始用
# 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"
为什么?
# re: 用Powerdesigner生成NHebernate的MAP文件
我的PD9.5怎么在没有这个Profile\BasePackage\Templates\VisualStudio.NET\ProjectSourceFiles
这个??在那里
# re: 用Powerdesigner生成NHebernate的MAP文件
我用的是1.0版,在9.5中是没有这一项to 飞鹰
关联表的问题,我也没有弄的太明白,过几天项目中要用到这一块,到时候仔细研究一下,再深入交流
# re: 用Powerdesigner生成NHebernate的MAP文件
@wljcan好啊,我在最近的项目中也准备使用NHibernate,到时候一起研究研究。
# re: 用Powerdesigner生成NHebernate的MAP文件
myPrimaryKey和MyClassPath
怎么定义的。能给我一份
C#.xol吗?谢谢了
cheng_wenjie@hotmail.com
# re: 用Powerdesigner生成NHebernate的MAP文件
to joenscheng已发
# re: 用Powerdesigner生成NHebernate的MAP文件
楼主myPrimaryKey
和MyClassPath
怎么定义的。能给我一份
C#.xol吗?谢谢了
iamygx@sina.com
# re: 用Powerdesigner生成NHebernate的MAP文件
配置文件已经做了一些修改,现在基本上已经满足要求,目前存在的问题是:1、因为在OO模型中,string没有长度,因此无法自动为MAP文件设置String的长度,默认为60。 (现在想到了一个方案解决,可是太麻烦)
2、在使用one-to-many时,只使用了 set,也就是IDictionary,没有用到数组和IList,大家可以根据自己的需要进行修改。
iamygx@sina.com ,我已经发到你邮箱了
# re: 用Powerdesigner生成NHebernate的MAP文件
谢谢楼主# re: 用Powerdesigner生成NHebernate的MAP文件
楼主,我现在使用middlegen2.0从数据库生成hbm.xml文件,然后从hbm.xml文件生成.java文件,但是这些java文件都只是典型的set和get方法。我想利用该工具生成一些别的方法:例如insert、update、query等。我琢磨了半天,也不知道在哪儿进行配置,现在请楼主帮忙。不胜感激# re: 用Powerdesigner生成NHebernate的MAP文件
to weimaojun你可能对hibernate的结构还不是很了解,从hbm.xml从生成的代码是实体类,只用来描述实体中的数据,在hibernate架构中提供了对数据进行处理的方法,不需要你在这些类里添加 insert、update等方法。
多看看例子你就明白了。
# re: 用Powerdesigner生成NHebernate的MAP文件
我也是最近才使用nhibernat的,想找个工具自动生成hbm.xml,我对Power designer不 太熟,能不能把你的配置文件给我一份并简单说说如何配
# re: 用Powerdesigner生成NHebernate的MAP文件
caidehui@21cn.com# re: 用Powerdesigner生成NHebernate的MAP文件
好,希望与你一起探讨GTL语言,同时CSDN的POWERDESIGNER区也欢迎你# 能不能把你的配置文件给我一份
能不能把你的配置文件给我一份 gangleader@126.com# re: 用Powerdesigner生成NHebernate的MAP文件
iadf# re: 用Powerdesigner生成NHebernate的MAP文件
哪位有powerdesigner 10 的注册码吗.请给我一个好吗.
我的E-mail: yzk406@163.com