entity-framework-core - 我应该多久创建一次 DbContext?
问题描述
是的,有很多类似的问题,但请听我说完。
我有一个场景,我迭代项目和其中一个Update
或Add
它们。让我们以这个为例
// var ctx = ctxFactory.Get();
foreach(var book in cart)
{
// var ctx = ctxFactory.Get();
var dbBook = ctx.Books.FirstOrDefault(p => p.ISBN == product.ISBN);
if (dbBook == null)
{
ctx.Add(book);
}
else
{
dbBook.Excerpt = book.Excerpt;
ctx.Update(dbBook);
}
ctx.SaveChanges()
}
我的问题是:我应该在循环内部还是外部创建上下文?
解决方案
应该尽可能少地创建,并且DbContext
应该尽可能多地重复使用。也就是说,我认为这就是你要找的东西:
using (var ctx = ctxFactory.Get())
{
var dbBook = ctx.Books.FirstOrDefault(p => p.ISBN == product.ISBN);
foreach (var book in cart)
{
if (dbBook == null)
{
ctx.Add(book);
}
else
{
dbBook.Excerpt = book.Excerpt;
ctx.Update(dbBook);
}
}
ctx.SaveChanges();
}
此外,由于它是一次性对象,因此您应该始终处理它或使用 using 语句封装它的使用,就像我在示例中所做的那样。
推荐阅读
- typescript - TypeScript 路径映射“找不到模块 a-mapped/a”
- java - Spring Search Lucene - 术语拼写已更改
- reactjs - 来自 GetFolderByServerRelativeUrl 的 MS Edge HTTP403 在 React WebPart 中使用 httpClient.get
- javascript - 在javascript中计算尾随零
- r - 读取有错误的制表符分隔数据集
- php - Laravel 在表中添加额外字段会导致一般错误:2057
- html - 由于缺少滚动条,全屏导航跳转
- javascript - 是否可以使用公共文件夹中的 create-react-app 提供静态文件?
- c# - 在 ASP.NET Core 的视图中显示来自控制器的视图模型数据
- gnuplot - 在命令行用图像绘制 gnuplot 矩阵,为什么需要两个 e?