Как я могу выбрать столбец в словаре объектов, используя как с nHibernate? - PullRequest
0 голосов
/ 29 ноября 2018

Я использую несколько многоязычных словарей для представления данных в полях выбора в моем приложении.Схема словарей следующая: enter image description here

Данные внутри, например:

enter image description here

Сущности и отображения приведены ниже:

    public class HighestLevelOfEducation
{
    public virtual int Id { get; set; }

    public virtual DateTime CreatedAt { get; set; }

    public virtual IDictionary<string, HighestLevelOfEducationLocalized> LocalizedData { get; set; }
}

public class HighestLevelOfEducation
{
    public virtual string Name { get; set; }
}


public class HighestLevelOfEducationMap : ClassMapping<HighestLevelOfEducation>
{
    public HighestLevelOfEducationMap()
    {
        this.Schema(SchemaConst.Dictionary);
        this.PrimaryKeyId(x => x.Id);
        this.Lazy(true);
        this.Property(x => x.CreatedAt, mapping => mapping.NotNullable(true));
        this.Map(
            prop => prop.LocalizedData,
            mapper =>
            {
                mapper.Schema(SchemaConst.Dictionary);
                mapper.Fetch(CollectionFetchMode.Subselect);
                mapper.Lazy(CollectionLazy.NoLazy);
                mapper.Cascade(Cascade.DeleteOrphans | Cascade.All);
                mapper.Table(nameof(HighestLevelOfEducationLocalized));
                mapper.Key(keyMapper =>
                {
                    keyMapper.Column("Id");
                    keyMapper.ForeignKey($"{typeof(HighestLevelOfEducation).Name}_{typeof(HighestLevelOfEducationLocalized).Name}_FK");
                });
            },
            key =>
            {
            },
            value =>
            {
                value.Component(x => x.Property(prop => prop.Name));
            });
    }
}

Теперь я столкнулся с новой задачей - найти словарь по его имени, используя оператор like.

Например, я бы хотел найти уровенькакое имя в любой культуре содержит «Sience»:

var levels = session.Query<HighestLevelOfEducation>()
                   .Where(x => x.LocalizedData.Any(l => l.Value.Name.Contains("Science")))
                   .ToList();

Я попробовал несколько примеров из ответов, подобных моему, которые используют как Словарь, но я не могу найти никакого ответа относительно использования словаря со сложным объектом.Не могли бы вы помочь мне с этой задачей?

PS Версия nHibernate - 4.1.1.400

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