2010-10-18 115 views
1

我想將下列公司映射到以下地址。我希望它是單向關係,因爲地址類正在被其他幾個類使用。映射單向ManyToMany?

當我生成模式時,結點表已成功創建,但是當我嘗試保存實體時,結點表中沒有任何內容存在。只在地址和公司的表格中。我需要做些什麼來完成這項工作?

public CompanyMapping() 
{ 
    Map(x => x.Name); 

    HasManyToMany(x => x.Addresses); 
} 

public AddressMapping() 
{ 
    Id(x => x.Id); 

    Map(x => x.AddressLineOne) 
     .Not.Nullable(); 

    Map(x => x.AddressLineTwo) 
     .Nullable(); 

    Map(x => x.PostCode) 
     .Not.Nullable(); 

    Map(x => x.City) 
     .Not.Nullable(); 
} 

public class HasManyToManyCascadeConvention : IHasManyToManyConvention 
{ 
    public void Apply(IManyToManyCollectionInstance instance) 
    { 
     instance.Cascade.All(); 
     instance.Inverse(); 
     instance.Key.ForeignKey(Inflector.Underscore("fk_" + instance.EntityType.Name + "_" + instance.ChildType.Name)); 
    } 
} 

<class xmlns="urn:nhibernate-mapping-2.2" name="Company" table="`company´"> 
    <id name="Id"> 
     <column name="company_id" /> 
     <generator class="identity" /> 
    </id> 
    <bag table="company_address" lazy="false" cascade="save-update" name="Addresses"> 
     <key column="company_id" /> 
     <many-to-many class="Address" column="address_id" /> 
    </bag> 
    <property name="Name"> 
     <column name="name" /> 
    </property> 
</class> 

編輯2010-11-05:如果我添加映射BillingAddress和是DeliveryAddress這樣,我沒有任何問題。

References(x => x.BillingAddress) 
    .Column("billing_address_id") 
    .ForeignKey("fk_account_billing_address") 
    .Cascade.All() 
    .Fetch.Join(); 

References(x => x.DeliveryAddress) 
    .Column("delivery_address_id") 
    .ForeignKey("fk_account_delivery_address") 
    .Cascade.All() 
    .Fetch.Join(); 

在rails中我會使用多態關聯,我想這意味着在NHibernate中的任何關係沒有?

回答

0

您需要告訴nHibernate集合的哪一側穿着褲子。看看它是否有效:

HasManyToMany(x => x.Addresses) 
    .Inverse() 
    .Cascade.All(); 
+0

不起作用。我用其中一個慣例更新了代碼。我會發布的XML以及 – mhenrixon 2010-10-19 05:50:18

+0

我已經嘗試過反向,而不是反向。使用不帶按鍵的鍵等等,但它會產生相同的結果。連接表中沒有任何內容。 – mhenrixon 2010-10-19 05:53:15

+0

您的保存包裹在交易中嗎? – 2010-10-19 11:30:26