Свободный NHibernate IList <string> - PullRequest
0 голосов
/ 10 марта 2012

У меня есть следующий класс:

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);
}

Таблица «адресные линии» создается с двумя столбцами «Address_Id» и «AddressLine» с внешним ключом таблицы «address».

По какой-то причине при сохранении адреса коллекция AddressLines не сохраняется в базе данных;

Я что-то упустил?

Похоже, не так много информации о сопоставлении IList. Я знаю, что раньше это было невозможно, потому что строка является типом значения, а не типом сущности, но я уверен, что теперь это возможно?

Ответы [ 2 ]

3 голосов
/ 12 марта 2012
HasMany(x => x.AddressLines).Element("AddressLine").Cascade.AllDeleteOrphan();
1 голос
/ 12 марта 2012

Вам необходимо установить каскадное соглашение по умолчанию.

При использовании Automapping это делается следующим образом:

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

Насколько я знаю, вы можете сделать то же самое с отображениемклассы, но я не знаю точный синтаксис.

...