Asp Net EF 4 SoftDelete如何排除删除的行?

时间:2018-01-26 04:15:00

标签: c# asp.net entity-framework webforms soft-delete

我通过覆盖类似于魅力的上下文的SaveChanges方法来使用软删除,但我无法过滤具有IsDeleted column = true的条目。 我使用的是EF4,我知道它已经过时了,但是这个项目很大,而且我没有太多升级EF版本的经验,对此也有很多建议。

我已经尝试了这个但是它没有工作,只要我将实体绑定到带有db.Foo.ToList()的gridview,我就会得到所有列,包括软删除的列。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Foo>()
             .Map(m => m.Requires("IsDeleted").HasValue(false));
        }

提前致谢!!

编辑我发布了我找到的解决方案!! 我希望它适用于未来的访问者。来自阿根廷的干杯。

2 个答案:

答案 0 :(得分:0)

您可能希望查看NotMapped属性数据注释以排除IsDeleted属性。

public class Foo
{
    public int ID { set; get; }
    public string Name { set; get; } 
    [NotMapped]
    public bool IsDeleted { set; get; }
}

您需要使用System.ComponentModel.DataAnnotations命名空间才能使用NotMapped属性。

或者,您可以在Ignore()方法

中尝试使用OnModelCreating
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
   modelBuilder.Entity<Foo>().Ignore(t => t.IsDeleted);
   base.OnModelCreating(modelBuilder);
}

另请查看以下链接,了解如何升级EF

Upgrade EF 4 EDMX to EF 6

https://msdn.microsoft.com/en-us/library/dn469466(v=vs.113).aspx

答案 1 :(得分:0)

我做的工作是:

1-直接在图形视图中从模型中删除属性。

2-在Model context.edmx的图形视图中,右键单击您正在处理的模型,然后单击Table Mappings。

3-在那里,我选择了IsDeleted列,选择运算符&#34; Is&#34;在右侧,只需输入Null。

之后,所有查询都会过滤掉列,并且我只能列出非软删除的行。 我在深夜阅读的30个帖子中看到了这个解决方案,它就像一个魅力!