Можно ли указать имя свойства Index для использования в списках в свободном соглашении nhibernate? - PullRequest
5 голосов
/ 12 марта 2010

При отображении HasMany или HasManyToMany в свободный nhibernate, вы можете указать имя столбца для использования в списке в качестве параметра метода AsList () следующим образом:

HasMany(c => c.Customers)
    .AsList(c => c.Column("PositionIndex"));

Я бы предпочел иметь возможность установить это, используя соглашение Fluent NHibernate (или уже существующее, или пользовательское), тем более что имя по умолчанию кажется «Index», что является зарезервированным словом в MSSQL.

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

public void Apply(IOneToManyCollectionInstance instance)
{

}

Есть идеи?

Ответы [ 2 ]

1 голос
/ 25 августа 2011

на всякий случай, если кто-то придет сюда

, начиная с FNH 1.2, можно поменять пакет на список в соглашении. С этим я реализовал:

class CollectionsAreListsConvention : ICollectionConvention
{
    public void Apply(ICollectionInstance instance)
    {
        instance.AsList();
        instance.Key.Column(instance.EntityType.Name + "_id");

        var mapping = (CollectionMapping)instance.GetType()
            .GetField("mapping", BindingFlags.Instance | BindingFlags.NonPublic)
            .GetValue(instance);

        if (!mapping.HasValue(m => m.Index))
        {
            var indexmapping = new IndexMapping();

            indexmapping.AddColumn(new ColumnMapping
            {
                // for Classes with more than one collection to another Class
                Name = instance.Member.Name + "_position",
            });

            mapping.Index = indexmapping;
        }
    }
}

Не идеально, но достаточно для моего проекта с тоннами списков

1 голос
/ 26 января 2011

Когда применяется соглашение, базовое отображение уже создано. В настоящее время нет способа изменить это отображение на упорядоченную коллекцию (или любой другой тип) с помощью соглашения.

Однако вы все равно можете изменить тип коллекции с помощью IAutoMappingOverride <>, поскольку они применяются до соглашений.

Даже если это еще не поддерживается, оно выглядит довольно высоко в списке Todo для следующего выпуска. Смотрите эту тему для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...