假設我有一個叫Item
模型,看起來像這樣:應用LINQ到一個DbSet內的DbContext
public int ID { get; set; }
public DateTime DateCreated { get; set; }
public DateTime? DateArchived { get; set; }
[Required]
public string Alias { get; set; }
它已被列入的DbContext ...
public DbSet<Item> Items { get; set; }
每當我想選擇數據庫中的所有項目,我只想包含Archived == null
和排序Alias
的項目。
當DbSet被調用時(例如在DbContext上)有沒有一種方法可以設置EF來執行此操作?例如,如果我在控制器中調用db.Items,我總是希望應用這些選項,而不必明確聲明它們。
我目前的做法是用前綴「All」重命名DbSet並添加一個應用了這些選項的函數(函數使用DbSet的原始名稱,以便腳手架控制器和頁面使用自定義查詢而不需要任何更改):
public DbSet<Item> AllItems { get; set; }
public IQueryable<Item> Items
{
get { return AllItems.Where(item => item.Archived == null).OrderBy(item => item.Alias); }
}
但是,這種方法的東西感覺hackish/wrong。這是做這件事的好方法嗎?這通常應該怎麼做?
我不認爲這是黑客或錯誤。出於某種原因,如果您還需要所有物品,該怎麼辦? – MutantNinjaCodeMonkey
@我同意@MutantNinjaCodeMonkey。對我來說這似乎很完美 –