当前位置: 首页 > news >正文

网站建设方案对比中国纪检监察报什么级别

网站建设方案对比,中国纪检监察报什么级别,长沙网站排名优化费用,wordpress 屏蔽谷歌注意#xff1a;我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布后#xff0c;功能可能存在变动。 继续探索Entity Framework Core 2.0#xff0c;今天我将探讨如何轻松使用软删除#xff08;或逻辑删除#xff09;。我的意思是以透明的方式实…注意我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布后功能可能存在变动。 继续探索Entity Framework Core 2.0今天我将探讨如何轻松使用软删除或逻辑删除。我的意思是以透明的方式实现软删除例如您是物理上的删除行。要实现软删除您需要添加一列以指示该行数据是否被逻辑删除。如果您想知道该行被删除可以使用布尔列如果您想知道删除的时间可以使用日期列。其次是更改所有查询使用此列过滤结果集您还需要将删除语句替换成为更新语句。 现在我们来看看如何用 Entity Framework Core 来实现这两件事 添加IsDeleted列 实体框架核心提供了非常灵活的映射。在上一篇关于跟踪列(英文原文)的博客中您将找到映射列的3种方法。在介绍中我已经说过软删除应该是透明的所以我决定在类型中不暴露IsDeleted属性。类型定义如下 public class Blog{    public int BlogId { get; set; }    public string Url { get; set; }    public ListPost Posts { get; set; } }  public class Post{     public int PostId { get; set; }       public string Title { get; set; }         public string Content { get; set; }          public int BlogId { get; set; }            public Blog Blog { get; set; } } 现在我们需要向 Entity Framework Core 指明类型有一个附加列 public class BloggingContext : DbContext{    public DbSetBlog Blogs { get; set; }          public DbSetPost Posts { get; set; }            protected override void OnModelCreating(ModelBuilder modelBuilder)    {        base.OnModelCreating(modelBuilder);modelBuilder.EntityPost().Propertybool(IsDeleted);} } 更改插入、删除查询 Entity Framework Core 使用ChangeTracker存储所有的更改。您可以在EF生成SQL语句和执行这些语句之前修改ChangeTracker。 public class BloggingContext : DbContext{      public override int SaveChanges(bool acceptAllChangesOnSuccess)    {OnBeforeSaving();          return base.SaveChanges(acceptAllChangesOnSuccess);}          public override Taskint SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken default(CancellationToken))    {OnBeforeSaving();            return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);}               private void OnBeforeSaving()    {             foreach (var entry in ChangeTracker.EntriesPost()){                    switch (entry.State){                             case EntityState.Added:entry.CurrentValues[IsDeleted] false;                                     break;                        case EntityState.Deleted:entry.State EntityState.Modified;entry.CurrentValues[IsDeleted] true;                          break;}}} } 现在生成以下代码执行的SQL语句 using (var context new BloggingContext()) {    var post new Post { Blog blog };context.Posts.Add(post);context.SaveChanges(); } exec sp_executesql NSET NOCOUNT ON;INSERT INTO [Posts] ([BlogId], [Content], [IsDeleted], [Title])VALUES (p1, p2, p3, p4);SELECT [PostId]FROM [Posts]WHERE ROWCOUNT 1 AND [PostId] scope_identity();-- p3 is 0 (false),Np1 int,p2 nvarchar(4000),p3 bit,p4 nvarchar(4000),p11,p2NULL,p30,p4NULL context.Posts.Remove(post);context.SaveChanges(); exec sp_executesql NSET NOCOUNT ON;UPDATE [Posts] SET [BlogId] p0, [Content] p1, [IsDeleted] p2, [Title] p3WHERE [PostId] p4;SELECT ROWCOUNT;,Np4 int,p0 int,p1 nvarchar(4000),p2 bit,p3 nvarchar(4000),p41,p01,p1NULL,p21,p3NULL 插入和删除请求已经被处理您现在还必须更改所有查询语句。 更改查询语句 Entity Framework Core 2.0 引入了一个新的概念查询过滤器。查询过滤器总是在生成的查询语句后面追加一个的where子句。这意味着您可以在模型创建时声明一个实体的过滤器然后将此过滤器隐式添加到使用该表的生成的每个查询语句中。 public class BloggingContext : DbContext{    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        base.OnModelCreating(modelBuilder);modelBuilder.EntityPost().Propertybool(IsDeleted);modelBuilder.EntityPost().HasQueryFilter(post EF.Propertybool(post, IsDeleted) false);} } 让我们看看查询过滤器的作用 var posts context.Posts.ToList(); SELECT [p].[PostId], [p].[BlogId], [p].[Content], [p].[IsDeleted], [p].[Title]FROM [Posts] AS [p]WHERE [p].[IsDeleted] 0 -- Query filter 查询过滤器也可以用于关联查询 var blogs context.Blogs.Include(_ _.Posts); SELECT [_].[BlogId], [_].[Url]FROM [Blogs] AS [_]ORDER BY [_].[BlogId]SELECT [p].[PostId], [p].[BlogId], [p].[Content], [p].[IsDeleted], [p].[Title]FROM [Posts] AS [p]INNER JOIN (    SELECT [_0].[BlogId]    FROM [Blogs] AS [_0] ) AS [t] ON [p].[BlogId] [t].[BlogId]WHERE [p].[IsDeleted] 0 -- Query filterORDER BY [t].[BlogId] 通过查询过滤器实现软删除非常容易 :) 查询软删除的行 如果您要还原已删除的行您必须能够查询到这些数据。这意味着您需要临时删除查询过滤器。EF已经添加了一种新方法IgnoreQueryFilters来表明您不希望将查询过滤器用于当前查询。 var deletedPosts context.Posts.IgnoreQueryFilters()                    .Where(post EF.Propertybool(post, IsDeleted) true); 恢复已删除的帖子有点啰嗦您需要更改跟踪器中查询并更新IsDeleted属性。 var deletedPosts context.Posts.IgnoreQueryFilters().Where(post EF.Propertybool(post, IsDeleted) true);foreach (var deletedPost in deletedPosts) {    var postEntry context.ChangeTracker.EntriesPost().First(entry entry.Entity deletedPost);postEntry.Property(IsDeleted).CurrentValue false; } context.SaveChanges(); 总结 使用Entity Framework Core 2.0实现软删除模式非常简单并且可以是透明的。实际上您可以无需更改LINQ代码的情况下将软删除添加到现有模型中。 相关文章  Entity Framework Core 生成跟踪列在Apworks数据服务中使用基于Entity Framework Core的仓储Repository实现Entity Framework Core的贴心优雅处理带默认值的数据库字段Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制 原文地址http://www.cnblogs.com/tdfblog/p/entity-framework-core-soft-delete-using-query-filters.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://wiki.neutronadmin.com/news/99162/

相关文章:

  • 上海做网站最专业wordpress绑定域名收费吗
  • 企业数据查询网站wordpress允许游客支付
  • 网页源代码搜索seo导航站
  • 怎么在百度建设一个网站天津网站优化排名
  • 阿里云备案 网站服务内容珠海发布最新通告
  • 做盗文网站吉林省科瑞建设项目管理有限公司网站
  • 建一个大型网站需要多少钱网站空间选择的主要原则有哪些
  • 网站首页关键词济南高风险区最新通告
  • 网站建设工作都包括哪些方面哪个公司的网络最好用
  • 视差网站建设个人网站的心得体会
  • 第八章 电子商务网站建设课件垂直网站怎么做
  • 苏州网站开发公司兴田德润怎么联系网题 做问卷的网站
  • 宁波专业品牌网站制作外包做网站最重要的是什么
  • 上海信息技术做网站网站建设软件定制开发
  • 谢岗仿做网站网站建设平台简介
  • 网站做资讯需要获取许可证吗成都网站seo技巧
  • 东莞沙田网站建设迅速建设企业网站
  • 网站建设与网页设计作业专业网站设计公司价格
  • 重庆网站排名优化公司wordpress支持内网和外网
  • 大连网站设计哪里有做旧版优化大师
  • 网页设计制作网站首页抖音企业推广费用
  • 防城港做网站安卓优化大师旧版
  • 全国做旅游开发的公司搜索引擎排名优化建议
  • 广东建设中标网站重庆注册公司网上申请入口
  • 沈阳网站优化 唐朝网络程序员外包公司有哪些
  • 仿制别人的网站违法吗咋制作网站
  • 秦皇岛中兵建设集团网站海报设计素材网站免费
  • 计算机网站开发书籍网页设计属于平面设计吗
  • 非经营备案网站能贴放广告么深圳网站建设设计首选公司
  • 北京网站策划公司seo工具网站