我正在与nHibernate合作,试图理解包集合。我的数据结构是相对直接...添加/删除项目到包集合
项:
<class name="Entry">
<id name="id" column="EntryId">
<generator type="guid.comb"/>
</id>
<property name="Name" column="Name"/>
<bag name="Results" table="Results" cascade="all">
<key column="EntryId" />
<one-to-many class="Result"/>
</bag>
</class>
结果:
<class name="Result">
<id name="id" column="ResultId">
<generator type="guid.comb"/>
</id>
<property name="Score" column="Score" />
<many-to-one name="Entry" class="Entry" cascade="all" />
</class>
我想这样做,这似乎并不奏效,是如下:
Entry entry = new Entry();
entry.Name = "Name";
// have tried saving at this point to:
// dbSession.SaveOrUpdate(entry);
Result result = new Result();
result.Score = 100;
entry.Results.Add(result);
dbSession.SaveOrUpdate(entry);
它似乎是在数据库中创建条目记录,但不是结果记录。在我的数据库中,我将EntryId作为结果表中的外键。同样,我希望能够从集合中删除结果对象,并将其保留到数据库中。我以为级联功能,照顾了这一点,但不知道我做错了......
编辑
现在我将它添加结果对象到数据库中,但删除似乎并不工作:
Entry entry = Entry.Load(id);
entry.Results.Remove(result);
dbSession.SaveOrUpdate(entry);
我已经尝试添加级联=“所有删除孤儿”,但这似乎删除父母和子女。我只想要它从数据库中删除一个入口对象?
我也这么认为,但事实并非如此。我提供了答案。 – mickyjtwin 2010-09-15 07:01:47