0

NHibernate と MVVM を使用するアプリケーションに取り組んでいます。プロジェクトに新しいマッピング ファイルを追加しようとしていますが、アプリケーションが NHibernate との接続を開くことができません (以前はすべて正常に機能していました)。

現在、新しいマッピング ファイルに関連するサービスを使用していないことに注意してください。

Mysql テーブル コード (新しいマッピング ファイルの)

CREATE TABLE IF NOT EXISTS Formats
(idFormat INT AUTO_INCREMENT PRIMARY KEY
,idProduit  INT
,idUnite INT
,quantite INT
);

プロジェクトのコード クラス:

public class Format : ObservableObject
{
    #region Membres privées
    private int? _idFormat = null;
    private Produit _produit;
    private Unite _unite;
    private int? _quantite;
    #endregion

    #region Propriétés

    /// <summary>
    /// Sets and gets the IdFormat property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public virtual int? IdFormat
    {
        get
        {
            return _idFormat;
        }

        set
        {
            if (_idFormat == value)
            {
                return;
            }

            RaisePropertyChanging();
            _idFormat = value;
            RaisePropertyChanged();
        }
    }

    /// <summary>
    /// Sets and gets the Produit property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public virtual Produit Produit
    {
        get
        {
            return _produit;
        }

        set
        {
            if (_produit == value)
            {
                return;
            }

            RaisePropertyChanging();
            _produit = value;
            RaisePropertyChanged();
        }
    }

    /// <summary>
    /// Sets and gets the Unite property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public virtual Unite Unite
    {
        get
        {
            return _unite;
        }

        set
        {
            if (_unite == value)
            {
                return;
            }

            RaisePropertyChanging();
            _unite = value;
            RaisePropertyChanged();
        }
    }

    /// <summary>
    /// Sets and gets the Quantite property.
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary>
    public int? Quantite
    {
        get
        {
            return _quantite;
        }

        set
        {
            if (_quantite == value)
            {
                return;
            }

            RaisePropertyChanging();
            _quantite = value;
            RaisePropertyChanged();
        }
    }
    #endregion
}

サービス :

public interface IFormatService
{
    IList<Format> RetrieveAll();
}

NHibernate サービス:

public class NHibernateFormatService : IFormatService
{
    public IList<Format> RetrieveAll()
    {
        using (var session = NHibernateConnection.OpenSession())
        {
            return session.Query<Format>().ToList();
        }
    }
}

マッピング (埋め込みリソース) :

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping assembly="Econo.Bouffe"
                   namespace="Econo.Bouffe.Model"
                   xmlns="urn:nhibernate-mapping-2.2">
  <class name="Format" table="Formats">
    <id name="IdFormat">
      <column name="idFormat" not-null="true" sql-type="INTEGER" />
      <generator class="identity" />
    </id>
    <many-to-one name="Produits" class="Produit" lazy="false">
      <column name="idProduit" not-null="true" sql-type="INTERGER" />
    </many-to-one>
    <many-to-one name="Unites" class="Unite" lazy="false">
      <column name="idUnite" not-null="true" sql-type="INTERGER" />
    </many-to-one>
    <property name="Quantite">
      <column name="quantite" not-null="true" sql-type="INTERGER" />
    </property>
  </class>
</hibernate-mapping>

.hbm.xml マッピング ファイルを削除するとすべて正常に動作しますが、追加すると次のエラーが発生します。

An exception of type 'System.TypeInitializationException' occurred in Econo.Bouffe.exe but was not handled in user code

Additional information: The type initializer for 'Econo.Bouffe.Helpers.NHibernate.NHibernateConnection' threw an exception.

If there is a handler for this exception, the program may be safely continued.

別の NHibernate サービスのこのコード行で:

using (var session = NHibernateConnection.OpenSession())
4

1 に答える 1

2

上記のスニペットは、実際のコードclass Formatからコピー/貼り付けされているようです。この場合、問題は仮想ではない にあります。次のようにエンティティを変更します。public int? Quantite

// virtual is a key to success
public virtual int? Quantite
{
    get {...

他のエンティティ(製品など)のマッピングがあることを期待すると、これで問題が解決するはずです

于 2013-10-18T02:58:58.067 に答える