【发布时间】:2016-03-07 10:28:14
【问题描述】:
假设我有一个名为 Item 的模型,它看起来像这样:
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); }
}
但是这种方法的某些方面让人感觉很老套/错误。这是一个很好的方法吗?这通常应该怎么做?
【问题讨论】:
-
我不认为这是 hack-ish 或错误的。如果您出于某种原因也需要所有物品怎么办?
-
@我同意@MutantNinjaCodeMonkey。对我来说似乎很好
标签: c# entity-framework