起初先DDL的NHibernate快速起步一文,然后下载了文章中的范例,自己小试了一把,然后写了一个Console程序,调用DDL类中的方法没问题,由于没装2005所以没打开工程,只是看看里面的代码。后来自己写了一个
测试类,按照DDL测试类中的写法就是不行总是报不能找到实体类User,后来和DDL聊天过程中发现了需要把实体类的配置文件User.hbm.xml加载进来,然后自己又多写了一句话
cfg.AddXmlFile("Goody9807.NhibernateTest.User.hbm.xml"); 才可以通过,但为什么DDL的方法就没问题呢?
后来才发现他是在程序中配置的,需要把xml文件设置为嵌入资源,如图所示:
而自己的写法是另一种方式
我的代码是:
1
using System;
2
3
using NHibernate;
4
using NHibernate.Cfg;
5
using NUnit.Framework;
6
7
namespace 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

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

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,所以有什么东西不对,还需指教,希望能和大家交流!