[id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
[label] [nvarchar](50) NOT NULL,
[qty] [int] NULL
(la colonne id étant la clé primaire auto-incrémentée.)
Afin d'effectuer le mapping O/R sous NHibernate, vous vous mettez à écrire une classe Product ... (3 colonnes dans la table en base de données impliquent 3 propriétés de classe ..)
namespace src.model
{
public class Product
{
private int id;
private string label;
private int qty;
public Product()
{
//
// TODO: Add constructor logic here
//
}
public virtual int Id
{
get { return id; }
set { id = value; }
}
public virtual string Label
{
get { return label; }
set { label = value; }
}
public virtual int Qty
{
get { return qty; }
set { qty = value; }
}
}
}
et effectuez son mapping xml dans un fichier Product.hbm.xml :
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="src.model.Product, StorageAssembly" table="Product">
<id name="id" column="id" type="Int32">
<generator class="identity" />
</id>
<property name="label" column="label" type="String" />
<property name="qty" column="qty" type="Int32" />
</class>
</hibernate-mapping>
Dans votre code C#, lorsque vous essayez d'effectuer une opération sur une instance de la classe "Product", vous obtenez, dès la création de la session factory, cette erreur :
Could not find a getter for property 'id' in class 'src.model.Product'
Résolution
Voici le changement à apporter au niveau du fichier Product.hbm.xml :
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="src.model.Product, StorageAssembly" table="Product">
<id name="Id" column="id" type="Int32">
<generator class="identity" />
</id>
<property name="Label" column="label" type="String" />
<property name="Qty" column="qty" type="Int32" />
</class>
</hibernate-mapping>
Dans le fichier de mapping, au niveau des balises <property>, on indique les noms des propriétés publiques Id, Label, Qty de la classe Product et non les champs (id, label, qty).
0 commentaires:
Enregistrer un commentaire