- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 ASP.Net Core 文档中的以下代码中编辑实体时,我一直在尝试理解 AsNoTracking 的使用,发现 here :
public async Task<IActionResult> OnPostAsync(int id)
{
if (!ModelState.IsValid)
{
return Page();
}
// Fetch Contact from DB to get OwnerID.
var contact = await Context
.Contact.AsNoTracking()
.FirstOrDefaultAsync(m => m.ContactId == id);
if (contact == null)
{
return NotFound();
}
var isAuthorized = await AuthorizationService.AuthorizeAsync(
User, contact,
ContactOperations.Update);
if (!isAuthorized.Succeeded)
{
return new ChallengeResult();
}
Contact.OwnerID = contact.OwnerID;
Context.Attach(Contact).State = EntityState.Modified;
…
await Context.SaveChangesAsync();
return RedirectToPage("./Index");
}
AsNoTracking 状态的摘要:
Disabling change tracking is useful for read-only scenarios because it avoids the overhead of setting up change tracking for each entity instance. You should not disable change tracking if you want to manipulate entity instances and persist those changes to the database using Microsoft.EntityFrameworkCore.DbContext.SaveChanges.
显然这不是只读场景,运行此方法的唯一原因是尝试更新数据库中的实体。
是否有解释为何此代码似乎违背了 AsNoTracking 摘要中给出的建议?
最佳答案
在获取 Contact
实例时使用 AsNoTracking()
的事实也是联系人重新附加回 context
的原因将其 State
设置为 EntityState.Modified
- 由于 contact
未被 context
跟踪,您需要明确让 context
知道该实体已被修改。
如果未使用 AsNoTracking()
,则不需要。
NoTracking Queries (微软文档)
通常,您在只读场景(CRUD 的 R 部分)中受益于 AsNoTracking()
至于在片段中使用 AsNoTracking()
的潜在意图,@Panagiotis Kanavos 的 comment恕我直言:
"I think I understand the "cleverness" here - the contact is loaded without tracking to reduce overhead if Update isn't authorized. If it is, the object is reattached and an attempt to Approve is made. Depending on that status, its final status is updated and finally saved."
关于c# - 在 ASP.Net Core 文档中使用 AsNoTracking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636686/
本来我也这么认为 context.Configuration.AutoDetectChangesEnabled = false; 将禁用更改跟踪。但不是。目前,我需要在所有 LINQ 查询(对于我的只
我正在尝试使用这段代码从数据库中删除一行 public ListPicture GetPicture(string Id) { ListPicture pic = Pictures.AsNoTra
我正在处理一个大型项目(有许多不同的厨师制作汤,多年来过去了)并且刚刚发现了以下代码。 private IEnumerable SomeSome() { using(DataModel conte
我有一个关于 .AsNoTracking() 扩展的问题,因为这是全新的而且非常困惑。 我正在为网站使用按请求上下文。 我的很多实体都没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库中有什么,
我有一个 Linq 查询来获取一个实体及其一些导航属性。 context.MyEntity .AsNoTracking() .Include(i=> i.Nav1) .Incl
我有一个关于 .AsNoTracking() 扩展的问题,因为这是全新的而且非常困惑。 我正在为网站使用按请求上下文。 我的很多实体都没有改变,所以不需要跟踪,但我有以下场景,我不确定数据库中有什么,
我需要来 self 的数据库的未经编辑的项目列表。它运行缓慢,所以我试图加快速度。 所以我将 AsNoTracking 添加到 LINQ 查询中,它运行得更慢了! 以下代码平均耗时 7.43 秒。 A
我正在将查询从 Linq-to-Sql 迁移到 EF。为了使禁用跟踪更难忘记,在 Linq-To-Sql 中,我编写了一个 ConfigureForQuery 包装函数,它只是将 ObjectTrac
抱歉我的英语不好 - 我在 WPF (.net 4.5) 应用程序中使用 EF 5 (Code First)。每个窗口都有自己的上下文。 我有一个这样的模型(为简洁起见省略了代码): public c
我想知道 Entity Framework 是否可以实现以下场景: 我想用选项 AsNoTracking 加载几个表,因为它们都像用户无法更改的静态表。 那些表也恰好是其他人的导航属性。到目前为止,我
所以我已经阅读了很多关于在 EF 中执行查询时使用 AsNoTracking() 的内容,特别是如果它返回实体,以便在您不更新时不要保留对事物的引用。 但我还读到 AsNoTracking 本身也可以
我有这样的实现: var query = this.DbContext.Set(); if (includeProperties != null && includeProperties.Any())
下面是我从数据库中获取信息的查询。从性能的角度来看,我想使用 AsNoTracking我的实体上的方法。 var teamrole = (from role in _context.USERROLEs
我已经设置了模拟数据库集,它读取一堆 json 文件并将它们反序列化为模拟数据库集。我将 AsNoTracking 添加到我的变量中有两个原因:1) 我将在数据库中存储一个新对象,并且不需要在更新条目
我有一个从大部分只读数据库中提取的 EF5 Code First 项目,因此我对绝大多数查询使用 .AsNoTracking() 以提高性能。 不过我很好奇:我有许多导航属性,有时了解它们是否已经加载
我有兴趣在我的 LINQ 选择查询中使用 AsNoTracking 来提高性能。我将 Entity Framework 5 与 Code First 结合使用。 但是,我的所有查询都是使用 LINQ
如何在查询 EF 上下文时将 Find() 与 AsNoTracking() 结合使用,以防止跟踪返回的对象。这是我做不到的 _context.Set().AsNoTracking().Find(i
我注意到可以通过三种不同的方式禁用跟踪: 通过上下文属性上的 AsNoTracking 在执行最终查询之前通过 AsNoTracking 通过 context.ChangeTracker.QueryT
在下面的片段中,我尝试使用 Anonymous Projection 获取数据,我不想跟踪获取的 entities。 注意:我已经解决了现有的堆栈问题,但无法为我找到有效的解决方案 using (va
我们目前正在为 Entity Framework 使用延迟加载并遇到内存不足异常。我们遇到此异常的原因是因为 Linq 查询加载了大量数据,并且在后期使用延迟加载来加载导航属性。但是因为我们不使用 N
我是一名优秀的程序员,十分优秀!