昨天剛開始研究NHibernate就遇到了一個問題,在這裡非常感謝 DDL,是他幫了我很大忙!
起初先DDL的NHibernate快速起步一文,然後下載了文章中的範例,自己小試了一把,然後寫了一個Console程式,調用DDL類中的方法沒問題,由於沒裝2005所以沒開啟工程,只是看看裡面的代碼。後來自己寫了一個
測試類別,按照DDL測試類別中的寫法就是不行總是報不能找到實體類User,後來和DDL聊天過程中發現了需要把實體類的設定檔User.hbm.xml載入進來,然後自己又多寫了一句話
cfg.AddXmlFile("Goody9807.NhibernateTest.User.hbm.xml"); 才可以通過,但為什麼DDL的方法就沒問題呢?
後來才發現他是在程式中配置的,需要把xml檔案設定為嵌入資源,:
而自己的寫法是另一種方式
My Code是:
1using System;
2
3using NHibernate;
4using NHibernate.Cfg;
5using NUnit.Framework;
6
7namespace Goody9807.NhibernateTest
8{
9 /**//// <summary>
10 /// Summary description for MyTestNH.
11 /// </summary>
12 public class MyTestNH
13 {
14 public MyTestNH()
15 {
16 //
17 // TODO: Add constructor logic here
18 //
19 }
20
21 public void AddUser()
22 {
23 Goody9807.NhibernateTest.User u =new Goody9807.NhibernateTest.User() ;
24
25 try
26 {
27 Configuration cfg = new Configuration().Configure();
28 //cfg.AddXmlFile("Goody9807.NhibernateTest.User.hbm.xml");
29 ISessionFactory factory =cfg.BuildSessionFactory() ;
30 ISession session=factory.OpenSession();
31
32 u.Email ="Goody9807@sina.com";
33 u.UserName ="Goody9807";
34 u.Password ="888";
35 session.Save(u) ;
36 }
37 catch(HibernateException e)
38 {
39 Console.WriteLine(e.ToString()) ;
40
41 }
42 finally
43 {
44
45 }
46
47
48 }
49 }
50}
51
另外文檔上寫得有些不明白
“
一個(某些時候更好的)方法是讓NHibernate自行用GetManifestResourceStream()來裝載對應檔
Configuration cfg = new Configuration().AddClass( typeof(NHibernate.Auction.Item) ).AddClass( typeof(NHibernate.Auction.Bid) );
好像也不行,為什嗎?
NHibernate 就會在這些類型的程式集的內嵌資源中尋找叫做NHibernate.Auction.Item.hbm.xml 和 NHibernate.Auction.Bid.hbm.xml的對應檔。這種方法取消了所有對檔案名稱的寫入程式碼。
另外一個(可能是最好的)方法是讓NHibernate讀取一個程式集中所有的設定檔:
Configuration cfg = new Configuration().AddAssembly( "NHibernate.Auction" );
這個有什麼用?
兄弟剛開始學習NHibernate,所以有什麼東西不對,還需指教,希望能和大家交流!