【问题标题】:Fluent NHibernate IList<string>流畅的 NHibernate IList<string>
【发布时间】:2012-03-27 18:03:51
【问题描述】:

我有以下课程:

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 的信息。我知道这在过去是不可能的,因为字符串是值类型而不是实体类型,但我被引导相信这现在应该是可能的?

【问题讨论】:

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


    【解决方案1】:
    HasMany(x => x.AddressLines).Element("AddressLine").Cascade.AllDeleteOrphan();
    

    【讨论】:

      【解决方案2】:

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

      使用Automapping时,如下:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多