我有一個ICollection屬性被映射爲一個Set(使用代碼映射)的映射類。請注意,集合包含字符串而不是另一個映射實體。例如QueryOver IList <string> property
public class Item
{
public virtual ICollection<string> Facts { get; set; }
}
public class ItemMapping
{
public ItemMapping()
{
Set(x => x.Facts, m =>
{
m.Key(k => k.Column("ItemId"));
m.Table("Facts");
}, col => col.Element(m =>
{
m.Column("Description");
m.Type(NHibernateUtil.String);
}));
}
}
這項工程和事實上的項目的CRUD操作工作正常。但是,我想QueryOver <>數據庫中的事實(例如,檢索計數或前20個事實或檢索一些隨機事實),但由於沒有實體,我該怎麼做?我不想引入Fact實體,因爲它唯一的屬性是字符串。
我已經接受了這個答案,因爲它可能是解決這個問題的最好方法。我不想將它映射到實體的原因是因爲它在我看來違背了YAGNI/KISS原則,即您可以稍後擴展它。所以我最終將它映射爲它,因爲它確實給了我額外的QueryOver <>()靈活性/ options .. – Chet
即使最簡單的代碼,我也無法複製這個答案。我在其他地方讀過,可能會出現一個在舊版NHib中出現混淆的錯誤(<4?)。無論如何,我不得不創建一個類來表示字符串項,然後可以做我的QueryOver沒問題。有點糟糕,但至少我有類型安全。 – ctrlplusb