2011-01-08 7 views
6

Problem EncounteredNHibernate: Wie dieses "Dialekt" Konfigurationsproblem lösen

Zur Laufzeit ich folgenden NHibernate.MappingException immer erhalten:

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

Ja, seine Build-Aktion ist auf Embedded Resource. Die Innerexception sagt:

"Could not find the dialect in the configuration" 

Erforderliche Informationen

Hier ist meine Konfigurationsdatei hibernate.cfg.xml genannt:

<?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> 

das ist eigentlich eine Copy-Paste aus den Configuration_Templates Ordner, in dem ich änderte nur die folgende 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" 

Und hier ist, wie ich es in meinem Code bin mit:

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

Optionale Angaben

<?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 
} 

Umwelt

  1. Windows 7 Pro;
  2. Visual Studio 2010 mit Ausrichtung auf .NET 4.0;
  3. NHibernate 3.0.0.GA;
  4. SQL Server 2005.

Frage

ich bereits versucht haben, den Dialekt Eigenschaft auf der Linie der Konfiguration zu bringen, und es weder gearbeitet.

Wie löst man dieses Dialektproblem, das ich habe?

+1

Laden Sie den NHibernate-Quellcode herunter, hängen Sie ihn an die App an und versuchen Sie, die Ausnahme zu fangen, wenn Sie geworfen wird. –

+0

haben noch nicht mit NH 3 gearbeitet - ich bin ein wenig überrascht zu lesen Urn: Nhibernate-Konfiguration -___ 2.2 ____ in Ihrer Konfigurationsdatei. – Marijn

+0

irgendeine Lösung darüber? – Kiquenet

Antwort

9

Sieht mir allright ... haben Sie diese Fragen gesehen:

Diese sind leichte Fehler zu machen, die die gegebene Ausnahme auslösen können.

+0

+1 Ich habe die oben genannten Informationen sichergestellt, aber der Fehler bleibt bestehen. Ich werde sehen, was ich mit dem tun kann, was Jani in seinem Kommentar vorgeschlagen hat. Danke für Ihre freundliche Unterstützung! =) –

+0

Hallo Marijn! Es tut mir leid, ich musste dieses Projekt für eine Weile beiseite legen und ich kann mich jetzt nicht darauf freuen. Ich werde entweder akzeptieren oder Ihnen sagen, was später nicht funktioniert, wenn ich zu dem Projekt zurückkehren kann, von dem diese Frage stammt. Danke für Ihr Verständnis und Ihre Geduld. =) –

3

Zwei Dinge werden das Problem beheben:

Diese Mitteilung nicht verwenden:

Configuration c = new Configuration(); 

Stattdessen verwenden: in Ihre Hibernate

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

Stellen Sie sicher, dass entweder Sie dies tun. cfg.xml-Datei:

<mapping assembly="Your assembly"/> 

ODER

AddAssembly(Assembly.GetCallingAssembly()); 

Beides wird Problem verursachen.

Verwandte Themen