2012-08-03 63 views
1

我有一个类有两个袋子。 一袋是一个类的集合,它的工作原理,另一个是长值的集合,这个不是持久的。 我已经搜索了所有的网页,我的映射看起来没问题。Nhibernate袋元素不坚持

在我的映射我有这样的:

<class name="Event" table="Events"> 
    <id name="Id" type="Int32"> 
     <generator class="native" /> 
    </id> 
    <property name="Name" /> 
    <property name="Owner" /> 
    <many-to-one name="DeliveryAddress" column="DeliveryAddressId" cascade="save-update, persist" /> 
    <many-to-one name="EventAddress" column="EventAddressId" cascade="save-update, persist" /> 
    <bag name="Friends" table="Event_Friends" lazy="false" inverse="true" cascade="save-update, persist" fetch="join"> 
     <key column="EventId" /> 
     <element column="Friend" type="Int64" /> 
    </bag> 
    <bag name="Products" table="Event_Products" lazy="false" inverse="true" cascade="all,delete-orphan" fetch="join"> 
     <key column="EventId" /> 
     <one-to-many class="Product" /> 
    </bag> 
    </class> 

当我打电话SabeOrUpdate在我的会话NHibernate的创建都不会忽略,创建事件和所有的产品,但不保存在好友列表中。 保存后,我发出一个Get,并且数据库上的选择是正确的。 我不知道还有什么可以的。

我这个映射模式是这样的:

public class Event 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Int64 Owner { get; set; } 
    public virtual Address DeliveryAddress { get; set; } 
    public virtual Address EventAddress { get; set; } 
    public virtual ICollection<Int64> Friends { get; set; } 
    public virtual ICollection<Product> Products { get; set; } 
} 

和我的数据库看起来是这样的:

Events 
------------------------------- 
Id    int  identity 
Name    varchar 
Owner    long 
DeliveryAddressId int 
EventAddressId int 

Address 
------------------------------- 
Id    int 
-- Code Abbreviated -- 

Event_Products 
------------------------------- 
Id    int 
EventId   int 
-- Code Abbreviated -- 

Event_Friends 
------------------------------- 
EventId   int 
Friend   long 

回答

2

你应该改变逆false您多头集合

<bag name="Friends" table="Event_Friends" lazy="false" inverse="false" cascade="save-update, persist" fetch="join"> 
    <key column="EventId" /> 
    <element column="Friend" type="Int64" /> 
</bag> 
+0

有用。我不能相信这是。我非常肯定,已经尝试了反向错误,但经过几个小时的测试,但没有成功,我们不知道我们真的做了什么。 – Luiz 2012-08-03 10:36:55