做体育最好的网站我做的网站不能往下拉

bicheng/2026/1/16 10:20:31/文章来源:
做体育最好的网站,我做的网站不能往下拉,军事时事新闻最新消息,门户网站建设和运行保障招标文件本博文翻译自#xff1a;http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查询过滤器 Entity Framework Core 2.0引入了全局查询过滤器#xff0c;可以在创建模型时应用到实体 。它使得构建多租户应用程序和支持对实体 的软…本博文翻译自http://gunnarpeipman.com/2017/08/ef-core-global-query-filters/ Entity Framework Core 2.0 全局查询过滤器 Entity Framework Core 2.0引入了全局查询过滤器可以在创建模型时应用到实体 。它使得构建多租户应用程序和支持对实体 的软删除变得更加容易。这篇博客文章提供了关于如何在实际应用中使用全局查询过滤器的更深入的概述以及如何将全局查询过滤器自动应用到领域实体。 示例解决方案。 我在 ASP.NET Core 2中构建了示例解决方案EFCoreGlobalQueryFilters 在更复杂的上下文中演示了全局查询过滤器。它演示了如何自动地将全局查询过滤器应用到领域实体。创建简单的数据库并使用sql脚本填充测试数据。 How global query filters look like? 全局查询过滤器是什么? 这就是全局查询筛选器在软删除时的样子。我们在DbContext类中重写了OnModelCreating方法。 protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.EntityPlaylist().HasKey(e e.Id);modelBuilder.EntityPlaylist().HasQueryFilter(e !e.IsDeleted);modelBuilder.EntitySong().HasKey(e e.Id);modelBuilder.EntitySong().HasQueryFilter(e !e.IsDeleted); base.OnModelCreating(modelBuilder); } 这些过滤器会在我们对给定类型的实体进行查询时应用 真正的应用程序需要什么? 上面的代码是简化的不考虑实际的应用场景。但是应用程序的体系结构通常是复杂的。所以当我们考虑到作为数字核心或企业一部分任务的关键的应用程序时创建的将不仅仅是几个类。本文的目标是演示以下内容: 如何支持多租户如何支持软删除实体如何自动检测实体 示例解决方案 有助于我们从更复杂的场景开始但它没有提供完全灵活和复杂的框架。当涉及到现实生活中的应用程序时涉及的问题太多了而每个应用程序通常都有自己的解决方案以解决不同的问题。 定义实体 让我们从定义一些实体开始。他们使用简单的基类并且期望所有的实体都从基类扩展。 public abstract class BaseEntity{       public int Id { get; set; }      public Guid TenantId { get; set; }     public bool IsDeleted { get; set; } } public class Playlist : BaseEntity{        public string Title { get; set; } public IListSong Songs { get; set; } } public class Song : BaseEntity{        public string Artist { get; set; }          public string Title { get; set; }            public string Location { get; set; } } 现在我们有一些简单的实体了是时候对多租户和软删除的实体进行下一步操作了。 租户提供者 在讨论多租户之前web应用程序必须有某种方式来检测与当前请求相关的租户。它可以是基于host的header检测但也可以是别的东西。在这篇文章中我们使用虚拟的提供者以便于我们提供简单的示例。 public interface ITenantProvider{    Guid GetTenantId(); } public class DummyTenantProvider : ITenantProvider{     public Guid GetTenantId()    {          return Guid.Parse(069b57ab-6ec7-479c-b6d4-a61ba3001c86);} } 这个提供者必须在启动类的ConfigureServices方法中注册。 创建数据上下文 我希望在这一点上,已经创建了这个数据库并配置了应用程序来使用它好了现在让我们从支持租户提供程序的简单数据上下文开始 public class PlaylistContext : DbContext{      private Guid _tenantId;      private readonly IEntityTypeProvider _entityTypeProvider;   public virtual DbSetPlaylist Playlists { get; set; }     public virtual DbSetSong Songs { get; set; }   public PlaylistContext(DbContextOptionsPlaylistContext options,                            ITenantProvider tenantProvider)        : base(options)    {_tenantId tenantProvider.GetTenantId();}   protected override void OnModelCreating(ModelBuilder modelBuilder)     {modelBuilder.EntityPlaylist().HasKey(e e.Id);modelBuilder.EntitySong().HasKey(e e.Id); base.OnModelCreating(modelBuilder);}       } 现在我们有了可操作的context和租户ID那么接下来我们就可以对自动创建的全局查询过滤器进行下一步操作了。 检测实体类型 在为所有实体类型添加全局查询过滤器之前必须检测实体类型。如果我们知道基本实体类型那么就很容易读取这些类型。但是有一个问题-model是建立在每个请求之上的而我们每次在创建model时都要扫描程序集显然这并不是一个好主意。因此类型检测必须支持某种类型的缓存。下面示例中的这两个方法用于数据上下文类。 private static IListType _entityTypeCache;private static IListType GetEntityTypes(){    if(_entityTypeCache ! null){         return _entityTypeCache.ToList();}_entityTypeCache (from a in GetReferencingAssemblies()                        from t in a.DefinedTypes                        where t.BaseType typeof(BaseEntity)                        select t.AsType()).ToList(); return _entityTypeCache; }   private static IEnumerableAssembly GetReferencingAssemblies(){       var assemblies new ListAssembly();     var dependencies DependencyContext.Default.RuntimeLibraries; foreach (var library in dependencies){             try{                  var assembly Assembly.Load(new AssemblyName(library.Name));assemblies.Add(assembly);          }            catch (FileNotFoundException){         }}            return assemblies; } 警告! 如果有单独的服务来返回实体类型那么在体系结构方面可以更好地理解。在上面的代码中可以直接使用实体类型变量而更糟糕的是可以调用GetReferencingAssemblies方法。如果您编写真正的应用程序那么最好使用单独的提供程序。 现在数据上下文知道实体类型并且可以编写一些代码来获得适用于所有实体的查询过滤器。 将查询过滤器应用于所有实体 这听起来很容易做但事实并非如此。有些实体类型的列表并没有直接使用方便的通用方法。在这一点上需要一个小技巧。我从CodeDump页面找到了解决方案EF-Core 2.0 过滤所有查询 (并试图实现软删除). 这里的代码不能使用因为这里的数据上下文对ITenantProvider有实例级的依赖关系。但要点仍然是相同的:让我们为数据上下文中的一些通用方法创建通用方法调用。 protected override void OnModelCreating(ModelBuilder modelBuilder){    foreach (var type in GetEntityTypes())    { var method SetGlobalQueryMethod.MakeGenericMethod(type);method.Invoke(this, new object[] { modelBuilder });} base.OnModelCreating(modelBuilder); } static readonly MethodInfo SetGlobalQueryMethod typeof(PlaylistContext).GetMethods(BindingFlags.Public | BindingFlags.Instance).Single(t t.IsGenericMethod t.Name SetGlobalQuery); public void SetGlobalQueryT(ModelBuilder builder) where T : BaseEntity {builder.EntityT().HasKey(e e.Id);  //Debug.WriteLine(Adding global query for: typeof(T));builder.EntityT().HasQueryFilter(e e.TenantId _tenantId !e.IsDeleted); } 这不是一种简单直观的代码。甚至当我看着这段代码时我也会瞪大眼睛。即使我看了上百遍它仍然看起来很疯狂和笨拙。SetGlobalQuery方法也是为实体定义主键的好地方因为它们都是从相同的基础实体类继承而来的。 测试驱动 如果我们想要了解全局查询过滤器是如何工作的我们可以使用样例应用程序中的HomeController 来实现这一点。 public class HomeController : Controller{    private readonly PlaylistContext _context;    public HomeController(PlaylistContext context)    {_context context;}    public IActionResult Index()    {           var playlists _context.Playlists.OrderBy(p p.Title); return View(playlists);} } 我修改了默认视图以显示查询返回的所有播放列表。 model IEnumerablePlaylistdiv classrow    div classcol-lg-8        h2Playlists/h2        table classtable table-bordered            thead                tr                    thPlaylist/th                    thTenant ID/th                    thIs deleted/th                /tr            /thead            tbody                foreach(var playlist in Model)                {                    tr                        tdplaylist.Title/td                        tdplaylist.TenantId/td                        tdplaylist.IsDeleted/td                    /tr                }            /tbody        /table    /div/div Web应用程序现在可以运行了。下面是我使用的示例数据。让我们记住示例应用程序使用的租户ID是069b57ab-6ec7-479c-b6d4-a61ba3001c86。 当运行web应用程序时将显示下面的表。 当我们比较这两个表时我们会很容易发现全局查询过滤器在工作中给出的预期结果。 结束 全局查询过滤器是Entity Framework Core 2.0的完美补充如果没有很多实体那么我们可以通过文档中给出的简单示例来实现。在更复杂的情况下需要一些复杂的代码来自动应用全局查询过滤器。希望将来会有更好的解决方案但目前这里给出的解决方案也做得很好。 相关文章  Entity Framework Core 2.0 新特性EF Core 插件 —— ToSqlEntity Framework Core 执行SQL语句和存储过程Entity Framework Core 批处理语句Entity Framework Core 命名约定Entity Framework Core 软删除与查询过滤器Entity Framework Core 生成跟踪列在Apworks数据服务中使用基于Entity Framework Core的仓储Repository实现Entity Framework Core的贴心优雅处理带默认值的数据库字段 原文地址http://www.cnblogs.com/chen-jie/p/ef-core-global-query-filters.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/90017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站网页主页的区别图书馆网站开发策划书

前言最近写了多篇关于Source Generators的文章&#xff0c;发现它确实可以简化我们的部分开发工作。这不&#xff0c;我又盯上了Blazor。问题默认的NavMenu.razor组件用于显示导航菜单&#xff0c;它的部分代码如下&#xff1a;<div class"NavMenuCssClass" oncli…

ssh框架做音乐网站为什么不能娶电商女

面试官&#xff1a;说说微信小程序的支付流程&#xff1f; 一、前言 微信小程序为电商类小程序&#xff0c;提供了非常完善、优秀、安全的支付功能 在小程序内可调用微信的API完成支付功能&#xff0c;方便、快捷 场景如下图所示&#xff1a; 用户通过分享或扫描二维码进入商…

大连开发区网站开发公司电话网页制作教程考拉

1、Linux RPATH & $ORIGIN 许多现代C / C 项目都利用Autotools创建GNU构建系统&#xff0c;例如 根据平台生成make文件。 可执行文件&#xff08;二进制文件&#xff09;在生成/编译过程中生成&#xff0c;并且可以在执行编译的计算机上本地执行。 但是&#xff0c;如果将…

无锡网站建设推广公司无锡网站建设价格费用

模板内的表达式是非常便利的&#xff0c;但是它们实际上只用于简单的运算。在模板中放入太多的逻辑会让模板过重且难以维护。这时候需要使用到vue的计算属性computed。 文件目录结构如下&#xff1a;利用vue脚手架创建 这里实现将一个字符串进行翻转的功能&#xff1a; 其中H…

做一晚水泥工歌曲网站怎么确认网站是什么语言做的

Git教程 版本库间的交换 1️⃣ 克隆版本库2️⃣ 如何告知 Git 其他版本库的位置3️⃣ 给版本库添加别名4️⃣ 获取数据5️⃣ 远程跟踪分支&#xff1a;监控其他分支6️⃣ 利用本地分支操作别处的版本库7️⃣ PULL操作8️⃣ PUSH操作9️⃣ 命名分支&#x1f33e; 总结 Git 是个…

网站权重划分怎样建公司网站

一、自定义部件库 原则上尽量做到前后端分离&#xff0c;接口方便&#xff0c;复制简单。 1、单选框部件 # encoding: utf-8 ################################################### # 自定义的单选框 #################################################### 对外…

邯郸网络信息工程教育太原seo哪家好

在新一年的起始之际&#xff0c;我们很荣幸地与 Elektor 合作推出由乐鑫领衔编辑的杂志特刊。欢迎点此阅读电子版本。 Elektor 杂志作为国际电子工程和科技创新的重要平台&#xff0c;自 20 世纪 60 年代起&#xff0c;就引领着电子制造的发展潮流。如今&#xff0c;它已经发展…

mmd怎么做下载网站做网站开发数据库怎么写

一、实验目的 本次实验使用wireshark流量分析工具进行网络嗅探&#xff0c;旨在了解ping命令的原理及过程。 二、网络环境设置 本系列实验均使用虚拟机完成&#xff0c;主机操作系统为Windows 11&#xff0c;虚拟化平台选择Oracle VM VirtualBox&#xff0c;组网模式选择“N…

男女做那个全面视频网站设计方案步骤

现在有越来越多的朋友在工作中选择使用SOLIDWORKS Visualize正版软件&#xff0c;这真是太棒了!这次的主题是小索带大家了解SOLIDWORKS Visualize界面&#xff0c;让更多的朋友快速的熟悉SOLIDWORKS Visualize界面。 【菜单栏】位于界面的顶端&#xff0c;菜单栏包含多个下拉菜…

瑞安网站网站开发是分为前端和后端吗

CuratorFramework是一个ZooKeeper客户端库&#xff0c;它提供了一些用于处理ZooKeeper连接和节点操作的高级API。其中&#xff0c;blockUntilConnected方法是一个阻塞方法&#xff0c;它会一直阻塞直到客户端成功连接到ZooKeeper服务器。 具体来说&#xff0c;blockUntilConne…

杭州滨江的网站建设公司jquery 个人网站

一直以来&#xff0c;iOS端游戏作弊问题都是游戏行业的一大痛点。在当下游戏多端互通的潮流下&#xff0c;游戏作为一个整体&#xff0c;无论哪一端出现安全问题&#xff0c;都会造成更加严重的影响。因此&#xff0c;iOS端游戏安全保护也同样十分重要。 iOS独特的闭源生态&am…

怎么做hs网站黄页大全18勿看2000网站

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言IONetty1. 引入依赖2. 服务端4. 客户端结果 总结引导类-Bootstarp和ServerBootstrap连接-NioSocketChannel事件组-EventLoopGroup和NioEventLoopGroup 送书…

蚌埠网站制作公司价格wordpress 前台 很慢

BeetleX针对redis访问封了全async/await操作模式&#xff0c;通过它可以更高效地访问redis服务。BeetleX.Redis提供读写分离和多机故意写入处理&#xff0c;同时安全的TLS访问机制&#xff0c;在使用功能上组件支持绝大部分基础指令&#xff0c;并提供json&#xff0c;protobuf…

龙胜网站建设公司哪个网站可以做免费请帖

云计算作业 Linux DAY1[08/09] 1、创建alan1用户&#xff0c;并使用root用户切换用户至alan1用户。&#xff08;两种方式切换【加-与不加-】&#xff0c;并总结其效果&#xff09; [rootlocalhost ~]# useradd alan1 [rootlocalhost ~]# su alan1 [alan1localhost root]$ p…

深圳专业建站平台成免费crm软件排名

基本用法&#xff1a; 在终端中输入"uname"即可显示系统的内核名称。 可以结合不同的参数使用&#xff0c;获取更详细的系统信息。 常见参数&#xff1a; “-s”&#xff1a;显示操作系统名称。 “-n”&#xff1a;显示网络节点主机名。 “-r”&#xff1a;显示内核版…

手机网站 英文有口碑的做网站

前提 1、Qt当有界面 2、构造完成 满足以上两个条件qt会生成ui_xxx.h文件。 如何查看 方法1 在cpp文件中找到UI下的一个对象 如&#xff1a; ui->textEdit Ui::QWDialog按住Ctrl键&#xff0c;使用鼠标左键点击UI下的一个对象&#xff0c;如&#xff1a;textEdit、QWDia…

国外做任务网站有哪些wordpress后台代码修改

闭包&#xff1a; 可以访问外部函数的变量&#xff0c;在内层函数中访问到外层函数的作用域. 她可以创建私有变量&#xff0c;延长变量的生命周期。 function father() { Var name “baiyun”; function son() { Console.log(name,”name”); } son() } father(); 柯里…

如何在淘宝网做自己的网站网关高性能 网站建设

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版&#xff0c;以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end

网站支付页面源代码网站下载服务器配置

现代农业养殖业中&#xff0c;养殖自动化温控系统已经成为提高生产效率和保障动物福利的关键技术之一。本篇文章将深入介绍养殖自动化温控系统的原理、组成、优势及其在不同类型养殖场中的应用实例&#xff0c;并展望该技术的未来发展。 一、养殖自动化温控系统概述 养殖自动…

自己架设网站服务器wordpress 积分集成

spring boot项目对参数进行校验时&#xff0c;比如非空校验&#xff0c;可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验&#xff0c;自带的校验规则无法满足要求&#xff0c;此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样&…