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

网站网络拓扑图南宁做网站开发的公司

网站网络拓扑图,南宁做网站开发的公司,如何策划一个营销方案,做h5网站pc加手机版要多少钱EFCore相关知识分享 文章目录 EFCore相关知识分享前言EFCore 的优势SaveChang的作用EF Core 查询优化小技巧使用投影#xff08;投影到所需的数据类型#xff09;延迟加载#xff08;Lazy Loading#xff09;与显式加载#xff08;Eager Loading#xff09;使用 AsNoTrac…EFCore相关知识分享 文章目录 EFCore相关知识分享前言EFCore 的优势SaveChang的作用EF Core 查询优化小技巧使用投影投影到所需的数据类型延迟加载Lazy Loading与显式加载Eager Loading使用 AsNoTracking减少客户端评估Client Evaluation使用合适的索引避免 Select * 和不必要的 Include使用异步查询Async Queries分析和优化生成的 SQL 查询使用批量操作Batching和分页Paging EF Core中entitystate的作用EF Core中引用属性和导航属性引用属性‌导航属性集合导航属性引用导航属性‌ EF Core中如何通过数据生成实体和dbcontext?EF Core如何处理并发使用乐观并发异常处理与重试机制使用悲观锁悲观并发控制对于并发处理的建议 EF Core实现事务的几种方式SaveChanges‌DbContextTransactionTransactionScope对于事务处理的建议 总结 前言 EF Core相比大家都听说过它是 .NET Core 中的一个开源对象关系映射ORM框架。它允许开发者以面向对象的方式与数据库进行交互从而简化了数据库访问的复杂性。EF Core 是 Entity Framework 的跨平台版本支持 .NET Core 以及 .NET Framework。 EFCore 的优势 提高开发效率EF Core 使得开发者可以使用 C# 代码表达数据操作无需编写复杂的 SQL 语句。通过定义实体类和数据库上下文EF Core 可以自动生成相应的数据库表结构和 SQL 语句。这大大减少了开发过程中编写 SQL 语句的工作量提高了开发效率。跨平台支持EF Core 支持多种数据库系统如 SQL Server、MySQL、PostgreSQL、SQLite 等。这意味着开发者可以在不同的平台和数据库环境中使用 EF Core具有很好的可移植性。强大的查询功能EF Core 提供了丰富的 LINQ 查询功能支持复杂的查询操作。通过 LINQ开发者可以使用 C# 代码编写查询表达式EF Core 会将其转换为相应的 SQL 语句。这使得查询操作更加直观和灵活。数据库迁移功能EF Core 的数据库迁移功能可以帮助开发者安全地更改数据库结构。通过迁移开发者可以在开发过程中轻松地添加、修改或删除数据库表和字段。这为数据库版本管理和持续集成提供了便利。 摘录自itpub博客 SaveChang的作用 EF Core中的SaveChanges方法主要用于将本地缓存中的所有状态变化提交到数据库确保数据的一致性和完整性‌。当调用DbContext的SaveChanges方法时EF Core会自动检测所有跟踪的实体变化并将这些变化应用到数据库中。如果所有操作都成功则提交事务如果任何操作失败则回滚事务确保数据库状态不变‌ EF Core 查询优化小技巧 使用投影投影到所需的数据类型 避免使用 Select(x x) 来选择所有列而是仅选择需要的列。这样可以减少数据库和网络传输的数据量。 var results dbContext.Users.Select(u new { u.Id, u.Name }).ToList();延迟加载Lazy Loading与显式加载Eager Loading 1. 延迟加载默认情况下EF Core 会懒加载相关实体。确保只在必要时才使用它因为过多的懒加载可能导致多次数据库查询。 2. 显式加载使用 Include 方法显式指定需要加载的相关实体这可以减少查询次数并提升性能。var results dbContext.Users.Include(u u.Orders).ToList();使用 AsNoTracking 当你不需要跟踪实体的状态时例如只读操作使用 AsNoTracking() 可以避免 EF Core 为每个实体维护其状态从而提升性能。 var results dbContext.Users.AsNoTracking().ToList();减少客户端评估Client Evaluation 确保 LINQ 查询尽可能在数据库服务器上执行避免将数据拉回客户端再进行过滤或排序。使用 AsEnumerable() 或 AsQueryable() 可能有助于控制这一点。 var results dbContext.Users.AsQueryable() // 保持查询在服务器端执行.Where(u u.Age 30).ToList();使用合适的索引 确保数据库表有适当的索引。索引可以显著提高查询速度特别是在执行大量数据筛选、排序或连接操作时。 避免 Select * 和不必要的 Include 只选择需要的列并避免不必要的 Include 调用。例如如果只需要用户的基本信息就不要加载不必要的关联数据 var results dbContext.Users.Select(u new { u.Id, u.Name }) // 选择必要的列.ToList();使用异步查询Async Queries 对于需要长时间运行或涉及大量数据的查询使用异步方法可以避免阻塞主线程提高应用程序的响应性。 var results await dbContext.Users.ToListAsync();分析和优化生成的 SQL 查询 使用 EF Core 的日志功能查看生成的 SQL 查询并对其进行优化。可以通过设置日志级别为 Information 或 Debug 来查看 SQL 查询。 dbContext.Database.Log message Debug.WriteLine(message);使用批量操作Batching和分页Paging 对于大数据集考虑使用分页技术来减少单次查询的数据量或者使用批量操作来减少数据库操作的次数。 var users dbContext.Users.Skip((page - 1) * pageSize).Take(pageSize).ToList(); // 分页示例EF Core中entitystate的作用 跟踪实体变化‌通过EntityStateEF Core能够跟踪实体对象的状态变化从而在调用SaveChanges方法时能够准确地执行相应的数据库操作如插入、更新或删除‌优化性能‌由于EF Core只会对处于Modified或Added状态的实体执行数据库操作因此通过合理设置EntityState可以减少不必要的数据库交互显著提升系统性能‌开发简化‌开发者可以通过EntityState清晰地理解与数据库的交互关系这不仅降低了出错概率也提高了开发效率‌ ‌EntityState的五种状态及其定义如下‌ ‌Detached游离状态‌实体对象与EF Core的上下文没有任何关系EF Core不会跟踪它的变化。 ‌Unchanged未更改状态‌实体对象被加载到EF Core的上下文中且自加载后没有发生任何变化。 ‌Deleted已删除状态‌实体对象在数据库中存在但已经被标记为删除。 ‌Modified已修改状态‌实体对象在数据库中存在并且某些属性值已经被修改。 ‌Added已添加状态‌实体对象已经被添加到EF Core的上下文中但还没有被保存到数据库中‌EF Core中引用属性和导航属性 引用属性‌ 引用属性通常用于表示一个实体与另一个实体之间的单向关系。例如在Blog和Post的关系中Post实体包含一个引用属性Blog用于指向其所属的Blog实体。通过这个属性可以直接访问相关的Blog实体而不需要通过额外的查询操作‌ 导航属性 导航属性用于表示实体之间的双向关系。它们不仅包含对相关实体的引用还提供了通过这些引用访问相关实体数据的能力。导航属性可以是集合导航属性或引用导航 集合导航属性 用于表示一个实体与多个相关实体的关系。例如在Person和CarData的关系中Person实体包含一个集合导航属性Cars用于存储其拥有的所有CarData实体‌ 引用导航属性‌ 用于表示一个实体与单个相关实体的关系。例如在Post和Blog的关系中Post实体包含一个引用导航属性Blog用于指向其所属的Blog实体‌ EF Core中如何通过数据生成实体和dbcontext? EF Core生成实体的方式主要有以下几种 通过实体类直接实例化通过查询数据库并映射到实体使用 FromSql 或 FromSqlRaw 方法直接从数据库查询并映射到实体高级用法使用 DbSet 的 Add 方法自动生成实体例如从用户输入或表单数据 EF Core如何处理并发 使用乐观并发 乐观并发假定多个事务可以同时发生并且在提交时检查是否有冲突。在 EF Core 中这通常通过在模型中使用 rowversion在 SQL Server 中为 timestamp 类型或 ConcurrencyToken 属性来实现。 使用 rowversiontimestamp在 SQL Server 中你可以直接使用 rowversion 类型作为并发令牌。 public class Blog {public int BlogId { get; set; }public string Url { get; set; }public byte[] RowVersion { get; set; } // 使用 byte[] 类型对应 rowversion }在 EF Core 中配置模型时不需要做额外配置EF Core 会自动处理这些字节。使用 ConcurrencyToken如果你使用的是其他数据库如 PostgreSQL你可以使用 ConcurrencyToken 属性。 public class Blog {public int BlogId { get; set; }public string Url { get; set; }[ConcurrencyCheck]public int? Version { get; set; } // 使用 int? 作为令牌类型 }异常处理与重试机制 当使用乐观并发时如果检测到并发冲突EF Core 会抛出一个 DbUpdateConcurrencyException 异常。你可以通过捕获这个异常并实现重试逻辑来处理这种情况。 try {db.SaveChanges(); } catch (DbUpdateConcurrencyException ex) {// 处理冲突例如重新加载实体并再次尝试更新或通知用户冲突发生var entry ex.Entries.Single();var clientValues entry.CurrentValues;var databaseValues entry.GetDatabaseValues();if (databaseValues null){// 数据已被删除可以选择抛出异常或进行其他处理}else{// 应用任何业务逻辑以决定如何合并数据例如询问用户或自动合并某些字段等。// 然后重新尝试保存更改。entry.CurrentValues.SetValues(databaseValues); // 可以选择重新加载数据库的值或合并当前值和数据库值。entry.State EntityState.Modified; // 标记为修改状态以便重试。try{db.SaveChanges(); // 再次尝试保存更改。}catch (DbUpdateConcurrencyException) // 可能需要再次捕获异常以处理可能的再次冲突。{// 处理再次冲突的情况。}} }使用悲观锁悲观并发控制 虽然 EF Core 主要支持乐观并发控制但在某些情况下你可能会需要使用悲观锁来控制并发。这可以通过数据库的特定功能实现例如 SQL Server 的 SELECT … FOR UPDATE 语句或者使用 WITH (ROWLOCK, UPDLOCK) 提示。但是在 EF Core 中直接使用这些功能通常需要自定义 SQL 或通过存储过程来实现。例如 var blogs db.Blogs.FromSqlRaw(SELECT * FROM Blogs WITH (ROWLOCK, UPDLOCK) WHERE Id {0}, id).ToList();对于并发处理的建议 尽早捕获并处理异常尽早捕获 DbUpdateConcurrencyException 并处理避免让异常传播到用户界面层。用户反馈当检测到并发冲突时提供清晰的反馈给用户让他们知道发生了什么以及可能的解决方案。日志记录记录并发冲突的详细信息以便于分析和调试。测试在开发过程中充分测试并发场景确保你的解决方案在各种情况下都能正常工作。 EF Core实现事务的几种方式 SaveChanges 在默认情况下EF Core的SaveChanges方法支持事务。如果在一次操作中添加或修改了多个实体SaveChanges会自动处理事务确保要么所有操作都成功要么在遇到错误时回滚所有操作从而保持数据的一致性‌ ‌DbContextTransaction 可以通过调用DbContext的Database.BeginTransaction方法来手动开始一个事务。这种方法提供了更细粒度的控制可以在需要时手动提交或回滚事务。使用Using语句可以确保事务在代码块执行完毕后自动回滚无需手动调用回滚操作‌ TransactionScope System.Transactions命名空间下的TransactionScope类提供了更高层次的事务管理。它不仅可以管理数据库事务还可以管理其他资源的事务。TransactionScope会自动管理事务的提交和回滚使得代码更加简洁和安全‌ 对于事务处理的建议 支付转账、图书馆借书‌等操作需要确保数据的一致性事务可以保证要么所有操作都成功要么在遇到错误时全部回滚。在复杂业务场景中默认的事务可能无法满足需求需要手动控制事务的开始、提交和回滚。使用过滤器Filters可以简化事务的管理通过在ASP.NET Core的Startup.cs中全局注册事务过滤器可以自动管理所有数据库操作的事务‌ 总结 EF Core的相关知识分享到这里就结束了后面如果还有其他知识会更新在这篇文章中。感谢大家的观看。
http://www.hkea.cn/news/14346944/

相关文章:

  • 杭州手机模板建站做网站迅雷下载链接设置
  • 南宁网站建设lilkj网站设计制作厂家有哪些
  • 网站建设的关键细节潜江资讯网手机版正式上线
  • 网站建设思路梳理忻州市忻府区
  • 网站文件夹目录国外专业做集装箱别墅网站
  • 在家做兼职官方网站平台有没有网站是免费做店招图片的
  • 网站上动画视频怎么做揭阳购物网站开发设计
  • 高端网站建设郑州wordpress如何添加关键词和描述
  • IT做网站工资怎么样windows图标wordpress
  • 临沂h5建站网站前台设计工具
  • 湘潭网站开发网站 绝对路径 相对路径
  • 有没有代加工的网站上海网站代优化
  • 官方网站页面尺寸可以免费建立网站吗
  • 微网站建设 合同网站怎么做的有创意
  • 医疗网站建设行情微网站怎么注册
  • 奉节做网站十大传媒公司
  • 关于网站建设的英文书籍东莞品牌网站建设多少钱
  • 四川住房建设部网站抖音小程序定制
  • 如何创建免费网站个人做跨境电商的平台网站
  • 成都网站免费制作搜索引擎网站的结构
  • 什么是新媒体运营南宁seo结算
  • 新安县住房和城乡建设局网站网站建设中数据安全研究
  • 做3d打印网站六安杂谈百姓畅言
  • 免费的x网站域名手机触屏网站制作软件
  • 网站的域名做邮箱新媒体管家wordpress
  • asp.ne做网站html 音乐网站
  • 网站为什么要服务器厦门做网站最好的公司有哪些
  • 网站快照怎么更新百度公司网站排名怎么做
  • 网站建设总结ppthtml静态网站开发个人博客
  • 网站安全检测工具网站站内优化方案