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())