我遇到以下問題。在我的應用程序中使用實體Owner
和Area
綁定許多。NHibernate與複合元素多對多
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);
}
}
}
表Owner2Area具有以下字段:
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)
因此對應於類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; }
}
我寫映射
<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>
對於現有的數據是每個區域SUC合理加載到Owners
,但當我在Owner2Area
到CreateSQLQuery
添加新記錄時,這些數據不會更新區域的實例。如果我重新打開表單並獲得所有區域,則添加鏈接已成功加載到集合中。
如何強制加載,從而記錄關係多對多?
NHibernate的v.2.0.1,DB MSSQL 2005
謝謝。我注意到NH執行插入和刪除記錄。我添加了一個映射'inverse =「true」',只使用select。 決定與'Evict'做我需要的東西。也許生活並不教我,但多對多的解決方案看起來不錯。 =) – 2010-04-05 20:32:38