我首先使用實體框架6與數據庫。在當前的項目中,我在數據庫中有一些永遠不應該被Entity Framework獲取的行。比方說,我有這樣的簡化模型:始終從實體框架中的DbSet排除一些行
public partial class Customer
{
public Customer()
{
}
public int Id { get; set; }
public string Name { get; set; }
public DateTime? Deleted { get; set; }
}
public partial class MyEntities: DbContext
{
public MyEntities()
: base("name=MyEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Customer> Customers { get; set; }
}
我每次做的Customer
DBSet
我真的只是想獲取有Deleted == null
項目的操作。這是因爲系統有時會將客戶標記爲已刪除,然後應用程序不應該知道這些項目(就好像它們不存在一樣)。
該模型在現實中更加複雜,這就是爲什麼我想在DbContext
級別控制此模型,而不是在每個查詢中添加Where()
條款。
有沒有辦法總是根據表中的列排除項目?
事情是這樣:
public partial class MyEntities: DbContext
{
public MyEntities()
: base("name=MyEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
Customers = Customers.Where(x => x.Deleted == null); // Obviously not working...
}
public virtual DbSet<Customer> Customers { get; set; }
}
編輯: 這將適用於在一個複雜的模型大約20-30不同的實體。所以我想避免查看,並用代碼來管理它。
編輯2: 感謝您關於EntityFramework.DynamicFilters的提示。但是,它似乎並未首先支持數據庫。
對不起,但是當使用Database First時,我們無權訪問 模型配置,因此不支持此功能。
https://github.com/jcachat/EntityFramework.DynamicFilters/issues/41
在EF6中,至少可以通過攔截器來實現這一點。不過,使用實現過濾器的包可能會更容易,不過,就像NHibernate一樣。 – sschimmel
或[EntityFramework.DynamicFilters](https://github.com/jcachat/EntityFramework.DynamicFilters)。另請參見:http://stackoverflow.com/a/34343982/861716 –
儘管事實上這些問題並無關聯,但我會將來自@GertArnold的鏈接回答稱爲此問題的有效重複。但那個答案是完美的。 – krillgar