• NHibernate初学问题总结一


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

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

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

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






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

     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.xmlNHibernate.Auction.Bid.hbm.xml的映射文件。这种方法取消了所有对文件名的硬编码。

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

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

    这个有什么用?

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

  • 相关阅读:
    对于在git上面拉代码报"error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054"解决方法
    在vue项目中如何添加eslint
    vscode编辑如何保存时自动校准eslint规范
    css3动画
    JS中的深拷贝与浅拷贝
    JS中的防抖与节流
    金三银四求职季,前端面试题小梳理(HTML、CSS、JS)
    正则表达式元字符大整理
    常规正则表达式练习,一起来开心的掉发吧
    关于子元素的margin-top对父级容器无效
  • 原文地址:https://www.cnblogs.com/goody9807/p/495117.html
Copyright © 2020-2023  润新知