2012-03-10 87 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(), 
       ); 

据我所知,你可以做同样的事情与测绘类,但我不知道确切的语法。