У меня есть объект «закладки», который имеет теги, которые являются строками. В C#, закладка Poco аналогична:Как использовать API критериев для запроса примитивных типов в отношениях «многие ко многим»?
public class BookmarkEntity
{
public virtual Guid Id { get; set; }
public virtual ISet<string> Tags { get; set; }
}
Я automapped сущность этой замены:
public class BookmarkEntityMappingOverride : IAutoMappingOverride<BookmarkEntity>
{
public void Override(AutoMapping<BookmarkEntity> mapping)
{
mapping.HasManyToMany(x => x.Tags).AsSet().Element("Value").Not.LazyLoad();
}
}
Это создает эти две таблицы:
create table "BookmarkEntity" (
Id UNIQUEIDENTIFIER not null,
primary key (Id)
)
create table Tags (
BookmarkEntity_id UNIQUEIDENTIFIER not null,
Value TEXT,
constraint FK9061CD2928F7F2F9 foreign key (BookmarkEntity_id)
references "BookmarkEntity"
)
Теперь я Мне бы хотелось получить уникальный набор тегов из базы данных, поддерживаемой SQLite. В настоящее время я выполнения этого запроса:
SELECT DISTINCT Value FROM Tags ORDER BY Value
Это делает то, что я хочу, но я хотел бы использовать критерии API, чтобы получить его немного более сильно типизированных. Я начал с этих усилий:
Session.CreateCriteria<BookmarkEntity>()
.SetProjection(
Projections.Distinct(Projections.Property<BookmarkEntity>(b => b.Tags)))
.AddOrder(Order.Asc(Projections.Property("Value")))
.List<string>();
Но это не работает, потому что он пытается запросить таблицу Закладок. Что мне нужно сделать, чтобы это было похоже на мой hardcoded SQL-запрос?
Вы уверены, что HasManyToMany - правильное отображение только для списка строк? Я бы сомневался и предложил использовать Just HasMany ... –
Я пошел туда и обратно, «HasMany», вероятно, имеет больше смысла. Мысль это в основном не относится к этому вопросу. –