C# 在实体框架中始终从数据库集中排除某些行
我首先使用实体框架6和数据库。在当前项目中,我在数据库中有一些永远不应该由EntityFramework获取的行。假设我有一个简化模型:C# 在实体框架中始终从数据库集中排除某些行,c#,entity-framework,C#,Entity Framework,我首先使用实体框架6和数据库。在当前项目中,我在数据库中有一些永远不应该由EntityFramework获取的行。假设我有一个简化模型: public partial class Customer { public Customer() { } public int Id { get; set; } public string Name { get; set; } public D
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; }
}
编辑:
这将应用于复杂模型中的大约20-30个不同实体。因此,我希望避免使用视图,而是用代码来管理它
编辑2:
感谢您提供有关EntityFramework.DynamicFilters的提示。然而,它似乎并不首先支持数据库
很抱歉,但在首次使用数据库时,我们无法访问
模型配置,因此不支持此操作
制作一个自定义视图怎么样 dbo.AvailableCustomers 像这样:
CREATE VIEW dbo.AvailableCustomers
AS SELECT * FROM Customers
Where Deleted IS NULL;
然后上下文的客户DBSet将指向新的视图。在EF6中,至少可以使用拦截器实现这一点。不过,使用实现过滤器的包可能更容易,比如NHibernate.Or。另请参见:我将@GertArnold的链接答案称为这个问题的有效副本,尽管这些问题并不相关。但这个答案是完美的,太好了。我去看看。谢谢。EntityFramework.DynamicFilter似乎是一个很棒的软件包,但它目前不支持数据库优先。好主意。但最终它将在很多表上实现。我已经更新了我的问题。
CREATE VIEW dbo.AvailableCustomers
AS SELECT * FROM Customers
Where Deleted IS NULL;