Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中始终从数据库集中排除某些行_C#_Entity Framework - Fatal编程技术网

C# 在实体框架中始终从数据库集中排除某些行

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

我首先使用实体框架6和数据库。在当前项目中,我在数据库中有一些永远不应该由EntityFramework获取的行。假设我有一个简化模型:

    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;