NHibernate: How to solve this dialect problem?

Problem detected

At runtime, I always get the following NHibernate.MappingException :

 "Could not compile the mapping document: GI.InventoryManager.CYB.Mappings.Part.hbm.xml" 

Yes, its build action is set to Embedded Resource . InnerException says:

 "Could not find the dialect in the configuration" 

The necessary information

Here is my configuration file called hibernate.cfg.xml :

 <?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" > <session-factory> <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> <property name="connection.connection_string"> Server=(local);initial catalog=GI_IM_CYB;Integrated Security=SSPI </property> <property name="adonet.batch_size">10</property> <property name="show_sql">false</property> <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property> <property name="use_outer_join">true</property> <property name="command_timeout">60</property> <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property> <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> </session-factory> </hibernate-configuration> 

This is actually a copy in the Configuration_Templates folder, in which I only changed the following information:

 Session Factory: "Removed the NHibernate.Test namespace and let the property for itself" Dialect: "From MsSql2000Dialect To MsSql2005Dialect" Connection_String: "I changed the Initial Catalog attribute to input my own database name" Factory Class: "From LinFu to Castle" 

And this is how I use it in my code:

 private void configBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { Configuration c = new Configuration(); c.AddAssembly(typeof(Part).Assembly); lock (_sessionFactory) { _sessionFactory = c.BuildSessionFactory(); } } 

Additional Information

 <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="GI.InventoryManager.CYB" namespace="GI.InventoryManager.CYB.Types"> <class name="Part" table="Parts" lazy="true"> <id name="Id" column="part_id"> <generator class="native"/> </id> <properties name="Description"/> <properties name="Number"/> <properties name="InStockQty"/> <properties name="Cost"/> </class> </hibernate-mapping> public class Part { #region Private Members private string _description; private string _number; #endregion #region Constructors /// <summary> /// Initializes an instance of the GI.InventoryManager.CYB.Types.Part class. /// </summary> public Part() { } #endregion #region Properties /// <summary> /// Gets or sets the description of this part. /// </summary> public virtual string Description { get { return _description; } set { if (!string.IsNullOrWhiteSpace(value)) _description = value.Trim(); } } /// <summary> /// Gets the underlying datastore unique identifier. /// </summary> public virtual int Id { get; private set; } /// <summary> /// Gets or sets the user-defined number. /// </summary> public virtual string Number { get { return _number; } set { if (!string.IsNullOrWhiteSpace(value)) _number = value.Trim(); } } /// <summary> /// Gets or sets the in-stock quantity. /// </summary> public virtual int InStockQty { get; set; } /// <summary> /// Gets or sets the cost. /// </summary> public virtual double? Cost { get; set; } /// <summary> /// Gets the inventory value for this part. /// </summary> /// <remarks> /// <para> /// This read-only property returns the product of <see cref="T:InStockQty"/> and <see cref="Cost"/>. /// In case the <b>Cost</b> property does not have a value, zero is returned. /// </para> /// </remarks> public double InventoryValue { get { if (Cost.HasValue) return InStockQty * Cost.Value; return 0.0; } } #endregion #region Methods #endregion } 

Wednesday

  • Windows 7 Pro
  • Visual Studio 2010 for .NET 4.0
  • NHibernate 3.0.0.GA;
  • SQL Server 2005.

Question

I already tried putting the dialect property in the configuration line, and it did not work.

How to solve this dialect problem that I have?

+6
nhibernate dialect
source share
2 answers

It looks good to me ... you saw these related questions:

  • nhibernate-could-not-find-oracle-dialect-in-configuration : call configuration.Configure() before adding the mapping document

  • nhibernate-and-sqlite-could-not-compile-the-mapping-document : copy hibernate.cfg.xml to the output directory

These are simple errors that can lead to this exception.

+9
source share

Two problems will help solve the problem:

Do not use this:

 Configuration c = new Configuration(); 

Use this instead:

 Configuration c = new Configuration().Configure(); 

Make sure that you either do this in the hibernate.cfg.xml file:

 <mapping assembly="Your assembly"/> 

OR

 AddAssembly(Assembly.GetCallingAssembly()); 

Performing both problems will create the problem.

+3
source share

All Articles