Я использую несколько многоязычных словарей для представления данных в полях выбора в моем приложении.Схема словарей следующая:
Данные внутри, например:
Сущности и отображения приведены ниже:
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