NHibernate初学问题总结一

昨天刚开始研究NHibernate就遇到了一个问题,在这里非常感谢 DDL,是他帮了我很大忙!

起初先DDL的 NHibernate快速起步一文,然后下载了文章中的范例,自己小试了一把,然后写了一个Console程序,调用DDL类中的方法没问题,由于没装2005所以没打开工程,只是看看里面的代码。后来自己写了一个
测试类,按照DDL测试类中的写法就是不行总是报不能找到实体类User,后来和DDL聊天过程中发现了需要把实体类的配置文件User.hbm.xml加载进来,然后自己又多写了一句话

cfg.AddXmlFile("Goody9807.NhibernateTest.User.hbm.xml"); 才可以通过,但为什么DDL的方法就没问题呢?

后来才发现他是在程序中配置的,需要把xml文件设置为嵌入资源,如图所示:






而自己的写法是另一种方式
我的代码是:

 1 None.gif using  System;
 2 None.gif
 3 None.gif using  NHibernate;
 4 None.gif using  NHibernate.Cfg;
 5 None.gif using  NUnit.Framework;
 6 None.gif
 7 None.gif namespace  Goody9807.NhibernateTest
 8 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 9ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
10InBlock.gif    /// Summary description for MyTestNH.
11ExpandedSubBlockEnd.gif    /// </summary>

12InBlock.gif    public class MyTestNH
13ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
14InBlock.gif        public MyTestNH()
15ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
16InBlock.gif            //
17InBlock.gif            // TODO: Add constructor logic here
18InBlock.gif            //
19ExpandedSubBlockEnd.gif        }

20InBlock.gif        
21InBlock.gif        public void AddUser()
22ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
23InBlock.gif            Goody9807.NhibernateTest.User u =new Goody9807.NhibernateTest.User() ;
24InBlock.gif            
25InBlock.gif            try
26ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
27InBlock.gif                Configuration cfg = new Configuration().Configure();
28InBlock.gif                //cfg.AddXmlFile("Goody9807.NhibernateTest.User.hbm.xml");
29InBlock.gif                ISessionFactory factory =cfg.BuildSessionFactory() ;
30InBlock.gif                ISession session=factory.OpenSession();
31InBlock.gif                
32InBlock.gif                u.Email ="Goody9807@sina.com";
33InBlock.gif                u.UserName ="Goody9807";
34InBlock.gif                u.Password ="888";
35InBlock.gif                session.Save(u) ;    
36ExpandedSubBlockEnd.gif            }

37InBlock.gif            catch(HibernateException e)
38ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
39InBlock.gif                Console.WriteLine(e.ToString()) ;
40InBlock.gif
41ExpandedSubBlockEnd.gif            }

42InBlock.gif            finally
43ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
44InBlock.gif            
45ExpandedSubBlockEnd.gif            }

46InBlock.gif            
47InBlock.gif
48ExpandedSubBlockEnd.gif        }

49ExpandedSubBlockEnd.gif    }

50ExpandedBlockEnd.gif}

51 None.gif


另外文档上写得有些不明白


一个(某些时候更好的)方法是让NHibernate自行用GetManifestResourceStream()来装载映射文件

Configuration cfg = new Configuration()
.AddClass( typeof(NHibernate.Auction.Item) )
.AddClass( typeof(NHibernate.Auction.Bid) );
好像也不行,为什么?

NHibernate 就会在这些类型的程序集的嵌入的资源中寻找叫做NHibernate.Auction.Item.hbm.xmlNHibernate.Auction.Bid.hbm.xml的映射文件。这种方法取消了所有对文件名的硬编码。

另外一个(可能是最好的)方法是让NHibernate读取一个程序集中所有的配置文件:

Configuration cfg = new Configuration()
.AddAssembly( "NHibernate.Auction" );

这个有什么用?

兄弟刚开始学习NHibernate,所以有什么东西不对,还需指教,希望能和大家交流!

转载于:https://www.cnblogs.com/goody9807/archive/2006/09/05/495117.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值