我有一個「書籤」實體,其標籤是字符串。在C#中,書籤波科是類似於:如何使用Criteria 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
這是我想要的,但我想使用Criteria API來獲得更強的輸入。我開始努力:
Session.CreateCriteria<BookmarkEntity>()
.SetProjection(
Projections.Distinct(Projections.Property<BookmarkEntity>(b => b.Tags)))
.AddOrder(Order.Asc(Projections.Property("Value")))
.List<string>();
但是,這不起作用,因爲它試圖通過書籤表進行查詢。我需要做些什麼才能使它與我的硬編碼SQL查詢相似?
你確定,HasManyToMany只是一個字符串列表的正確映射嗎?我懷疑,並建議只使用HasMany ... –
我已經反覆說過,'HasMany'可能更有意義。認爲這與這個問題大多不相關。 –