代码之家  ›  专栏  ›  技术社区  ›  user134363

nhibernate-如果连接可以传递给会话构造函数,为什么需要连接来构建工厂?

  •  1
  • user134363  · 技术社区  · 16 年前

    我刚接触到nhibernate,正试图使用它连接到DB2。经过反复的试验和错误的研究,以及更多的试验和错误的研究,我终于找到了一个我找不到答案的错误。

    错误消息显示:“用户必须提供ADO.NET连接-nhibernate没有创建它。”

    这个错误不是很有帮助。这是否意味着我需要1)在配置文件中放置连接字符串,或者2)是否需要将连接传递到工厂?如果1为真,这是强制性的吗?如果是这样,那么为什么我们能够将连接对象传递到会话中,这正是我想要做的?

    如果2)为真,如何将连接对象传入工厂?

    提前谢谢。下面是我的代码片段,可能会有所帮助:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
        </configSections>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
        <session-factory>
            <property name="dialect">NHibernate.Dialect.DB2400Dialect</property>
            <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
        </session-factory>
    </hibernate-configuration>  
    </configuration>
    
    try
    {               
        Configuration cfg = new Configuration();  
    
        cfg.AddInputStream(NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(persistentClass));
        SessionFactory = cfg.Configure().BuildSessionFactory(); //HERE I GET THE EXCEPTION
    }
    catch (Exception ex)
    {
        throw new Exception("NHibernate initialization failed", ex);
    }
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Paco    16 年前

    您需要会话工厂来进行配置,例如连接、使用的映射类型、使用的缓存类型、SQL方言类型等,而不仅仅是连接,因此将连接作为构造函数参数传递可能会给您带来另一个无用的异常。您必须在配置中设置连接。

        2
  •  0
  •   Aaron Fischer    16 年前

    如果你看 documentation 您应该能够看到如何通过编程创建会话工厂。或者,您可以使用FluentHibernate来避免该配置文件。