2012-03-10 25 views
0

我有以下類:功能NHibernate的IList <string>

public class Address 
{ 
    public virtual int Id { get; private set; } 

    public virtual IList<string> AddressLines { get; set; } 

    public virtual string CityOrTown { get; set; } 

    public virtual string County { get; set; } 

    public virtual string Postcode { get; set; } 

    public virtual string Country { get; set; } 

    public virtual Member Member { get; set; } 

    public Address() 
    { 
     AddressLines = new List<string>(); 
    } 

    public virtual void AddAddressLine(string addressLine) 
    { 
     AddressLines.Add(addressLine); 
    } 
} 

和下面的映射類:

public AddressMap() 
{ 
    Id(x => x.Id); 
    HasMany(x => x.AddressLines).Element("AddressLine"); 
    Map(x => x.CityOrTown); 
    Map(x => x.County); 
    Map(x => x.Postcode); 
    Map(x => x.Country); 
    References(x => x.Member); 
} 

表 'addresslines' 與兩列 'ADDRESS_ID' 和 'AddressLine' 創建用'地址'表的外鍵。

由於某些原因,當地址被保存時,'AddressLines'集合不會持久化到數據庫;

我錯過了什麼嗎?

似乎沒有關於映射IList的大量信息。我知道這並不是可行的,因爲字符串是值類型而不是實體類型,但是我被認爲現在應該可以做到這一點?

回答

3
HasMany(x => x.AddressLines).Element("AddressLine").Cascade.AllDeleteOrphan(); 
1

您需要設置默認的級聯約定。

當使用自動映射,它的工作如下:

  AutoMap.Assemblies(_assemblies) 
       .Conventions.Add(
        // Do cascading saves on all entities so lists will be 
        // automatically saved 
        DefaultCascade.All(), 
       ); 

據我所知,你可以做同樣的事情與測繪類,但我不知道確切的語法。