【发布时间】:2020-01-15 22:18:13
【问题描述】:
是否可以在 .NET Core 中执行 Add、AddAsync、Update 等而无需随后跟踪实体而无需编写代码来专门将上下文与跟踪实体分离?
// select, its possible to do no trackiing
var audit = _dbContext.Audit.First().AsNoTracking();
// doing an add or update, audit is now tracked unless it's detached
_dbContext.Audit.Add(audit);
int rows = _dbContext.SaveChanges();
_dbContext.Entry(audit).State = EntityState.Detached;
我问这个是因为我有一个使用 RabbitMq 消息并写入数据库的 Windows 服务。 RabbitMq 通过事件处理程序接收消息。所以数据库本质上变成了一个单例,即使它是作为瞬态添加的。我每次都可以创建一个新的数据库上下文。但这似乎有点矫枉过正。还是有更好的办法?
【问题讨论】:
-
不,创建一个新的上下文并不是矫枉过正,它已经为此做好了准备并进行了优化。 NoTracking 意味着,你确定,你不修改实体,没有人应该观察它。如果你添加新的,你肯定会修改实体,不跟踪它就意味着不保存它。
标签: c# .net-core entity-framework-core