2012-03-10 7 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が' 2列 '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(), 
       ); 

が、私は正確な構文を知らない:自動マッピングを使用する場合

、次のように行われています。