J'ai un problème avec nhibernate lorsque j'essaie d'insérer un objet ayant une relation biunivoque avec un autre objet. Il existe une classe appelée Article
Fichier cartographique
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<id name="ID" column="article_id" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Title" column="title" type="String" not-null="true" length="255" />
<property name="Body" column="body" type="String" length="1073741823" />
<property name="IsEnabled" column="is_enabled" type="Boolean" not-null="true" />
<many-to-one name="ParentArticle" class="..." column="parent_id" cascade="all" />
<bag name="Children" lazy="true" cascade="all-delete-orphan" >
<key column="parent_id" />
<one-to-many class="..." />
</bag>
La classe elle-même découle de ce fichier de correspondance et est omise pour des raisons de simplicité.
Ensuite, il y a une autre classe appelée SpecialArticle. Le mappage de cette classe est le suivant :
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<id name="ID" column="id" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Price" column="Price" type="Double" not-null="true" />
<one-to-one name="Article" class="..." fetch="join" cascade="all" />
La classe ArticleExtension est alors :
public class SpecialArticle
{
/// <summary>
/// Get/Set the ID for this question
/// </summary>
public virtual int ID
{
get;
set;
}
/// <summary>
/// Get/Set the expected price for this question or answer
/// </summary>
public virtual Double Price
{
get;
set;
}
/// <summary>
/// Get/Set the article that contains the rest of the information for this question
/// </summary>
public virtual Article Article
{
get;
set;
}
}
quand je veux insérer un article spécial dans la base de données, je le fais :
// Populate someArticle
// Populate someSpecialArticle
// Following code is wrapped in a transaction
someSpecialArticle.Article = someArticle;
Session.SaveOrUpdate(someArticle);
Session.SaveOrUpdate(someSpecialArticle);
L'objet someArticle est inséré correctement, mais l'instruction d'insertion de l'objet someSpecialArticle l'est : INSERT INTO tbl (Price) VALUES (@p0) ; select SCOPE_IDENTITY()
où se trouve l'article_id pour spécifier l'article parent ???
thx