J'ai rencontré le problème suivant. Dans mon application utilise les entités Owner
et Area
liant autant à beaucoup.NHibernate many-to-many avec élément composite
public class Area : DomainObject<int> {
private ISet<OwnersPeriod> _owners = new HashedSet<OwnersPeriod>();
public ICollection<OwnersPeriod> Owners {
get { return _owners; }
set {
Check.Require(value != null);
_owners = new HashedSet<OwnersPeriod>(value);
}
}
}
Table Owner2Area a les champs suivants:
CREATE TABLE [dbo].[Owner2Area](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDOwner] [int] NOT NULL,
[IDArea] [int] NOT NULL,
[FirstDate] [datetime] NOT NULL,
[LastDate] [datetime] NULL,
CONSTRAINT [PK_Owner2Area] PRIMARY KEY CLUSTERED)
correspond donc à la classe OwnersPeriod
public class OwnersPeriod {
private Owner _member;
private Area _area;
public Owner Owner { get {...} set{...} }
public Area Area { get { ... } set { ... } }
public DateTime FirstDate { get; set; }
public DateTime? LastDate { get; set; }
}
j'ai écrit cartographies
<class lazy="false" name="Core.Domain.Area, Core" table="Areas">
...
<set name="Owners" table="Owner2Area" inverse="true" lazy="true" >
<key column="IDArea"/>
<composite-element class="Core.Domain.OwnersPeriod, Core" >
<parent name="Area" />
<property name="FirstDate" type="datetime"/>
<property name="LastDate" type="datetime"/>
<many-to-one name="Owner" class="Core.Domain.Owner, Core" column="IDOwner"/>
</composite-element>
</set>
</class>
Pour chaque zone de données existantes sont suc mis à jour dans Owners
, mais lorsque j'ajoute un nouvel enregistrement dans Owner2Area
à CreateSQLQuery
, ces données ne sont pas mises à jour par exemple de zone. Si j'ai rouvert le formulaire et obtenu toutes les zones, le lien ajouté a été chargé avec succès dans la collection.
Comment peut être forcé de charger ajouté ainsi enregistrement de relation plusieurs-à-plusieurs?
Nhibernate v.2.0.1, db MSSQL 2005
Merci. J'ai remarqué que NH effectue des enregistrements d'insertion et de suppression. J'ai ajouté un mapping 'inverse =" true "', utilisé uniquement select. Décision avec 'Evict' faisant ce dont j'ai besoin. Peut-être que la vie ne m'apprend pas, mais la solution avec le plusieurs-à-plusieurs semble bien. =) –