流利的NHibernate IList <string> </string>

时间:2012-03-10 17:13:15

标签: c# fluent-nhibernate fluent-nhibernate-mapping

我有以下课程:

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'创建的,带有'address'表的外键。

出于某种原因,当保存地址时,“AddressLines”集合不会持久保存到数据库中;

我错过了什么吗?

似乎没有关于映射IList的大量信息。我知道这不是可能的,因为字符串是值类型而不是实体类型,但我现在认为这应该是可能的吗?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您需要设置默认的级联约定。

使用自动映射时,完成如下操作:

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

据我所知,你可以用映射类做同样的事情,但我不知道确切的语法。