采用此方法时,无需清除更改跟踪器或显式拆离实体实例。 但是,如果确实需要拆离实体,则调用 ChangeTracker.Clear 比逐个拆离实体更有效。实体状态
为清楚起见,此文本使用了关系数据库术语。 NoSQL 数据库通常支持类似操作,但可能具有不同的名称。 有关详细信息,请查阅数据库提供程序文档。默认情况下,跟踪返回实体类型的查询。 这表示可以更改这些实体实例,然后通过 SaveChanges() 持久化这些更改。 在以下示例中,将检测到对博客分级所做的更改,并在 SaveChanges() 期间将这些更改永久保存到数据库中。
基于在单个查询中加载集合导航可能会导致性能问题。 有关详细信息,请参阅单个查询和拆分查询。包含多个层级
EF Core 6.0 中已引入此功能。可使用 AutoInclude 方法配置每次从数据库加载实体时要包含的模型中的导航。 这与在结果中返回实体类型的每个查询中使用导航指定 Include 具有相同的效果。 以下示例演示如何配置要自动包含的导航。
对从属类型的导航也按照约定配置为自动包含,并且使用 IgnoreAutoIncludes API 并不会阻止包含它们。 它们仍将包含在查询结果中。
延迟加载可能会导致发生不必要的额外数据库往返(即 N+1 问题),应注意避免此问题。 有关详细信息,请参阅性能部分。
延迟加载委托的构造函数参数必须名为“lazyLoader”, 以后可能会换另一个名称。
Newtonsoft.Json.JsonSerializationException:为“MyApplication.Models.Blog”类型的“Blog”属性检测到自引用循环。如果正在使用 ASP.NET Core,则可以将 Json.NET 配置为忽略在对象图中找到的循环引用。 此配置是通过 Startup.cs 中的
此功能是在 EF Core 5.0 中引入的,仅在使用 Include 时才有效。 在不使用 Include 加载投影中的相关数据的情况下,EF Core 6.0 添加了对拆分查询的支持。通过 EF,可以指定应将给定 LINQ 查询拆分为多个 SQL 查询。 与 JOIN 不同,拆分查询为包含的每个集合导航生成额外的 SQL 查询:
Postid 的值不能中断,如果中间删除了数据,则PostID的值取出来肯定会有问题多个分页键
可在 GitHub 上查看此文章的示例。基本 SQL 查询
EF Core 7.0 中引入了 FromSql。 使用更旧的版本时,请改用 FromSqlInterpolated。SQL 查询可用于执行返回实体数据的存储过程:
FromSql 只能直接在 DbSet 上使用。 不能在任意 LINQ 查询的基础上组合使用它。多表查询
请在使用 SQL 查询时密切关注参数化
向 SQL 查询引入任何用户提供的值时,必须注意防范 SQL 注入攻击。 如果程序将用户提供的字符串值集成到 SQL 查询中,而用户提供的值被创建用来终止字符串并执行另一个恶意 SQL 操作,则表明发生了 SQL 注入。 若要详细了解 SQL 注入,请查看此页。
FromSql 和 FromSqlInterpolated 方法可以防止 SQL 注入,始终将参数数据作为单独的 SQL 参数进行集成。 但是,如果不当使用,FromSqlRaw 方法可能易受 SQL 注入攻击。
传递的参数必须与存储过程定义完全匹配。 请特别注意参数的排序,注意不要缺失或错放任何参数,也可以考虑使用命名参数表示法。 此外,请确保参数类型对应,并根据需要设置其 facet(大小、精度、规模)。动态 SQL 和参数
使用 FromSqlRaw 时要非常小心,始终确保值来自安全的源,或者经过正确清理。 SQL 注入攻击可能会为应用程序带来灾难后果。执行视图
EF Core 7.0 中已引入此功能。虽然可以使用 FromSql 来查询模型中定义的实体,但如果使用 SqlQuery,你就可以通过 SQL 轻松查询非实体标量类型,无需下降到较低级别的数据访问 API。 例如,以下查询从 Blogs 表中提取所有 ID:
始终验证用户输入:虽然 EF Core通过在查询中使用参数和转义文字来防止 SQL 注入攻击,但它不会验证输入。 根据应用程序的要求,在将 LINQ 查询中使用的来自不受信任的源的值分配给实体属性或传递给其他 EF Core API 之前,应执行相应的验证。 这包括用于动态构造查询的所有用户输入。 即使在使用 LINQ 时,如果接受用于生成表达式的用户输入,也会需要确保只能构造预期表达式。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |