entity-framework - 实体框架 - 以增量插入多个
问题描述
我想用增量号(MAX + 1)将多个对象保存到数据库中。当我只保存一个对象时,它可以正常工作,但是当我保存多个对象时,所有对象都具有相同的编号。这是我的代码:
for(int i = 0; i< 10; i++){
_context.Add(new Data(){Number = _context.Max(d => d.Number) + 1});
_context.SaveChanges();
}
如何将具有不同编号的多个对象保存到数据库中?谢谢
解决方案
通常,如果人们在没有适当规范的情况下提出实体框架问题,他们的意思是使用像对象这样_context
的标识符。DbContext
但是, aSystem.Data.Entity.DbContext
没有Add
功能。所以我不确定你的_context
对象代表什么。也许下次你会给出适当的规格。
幸运的是,您向我们展示了我们需要的三个功能:
- 如何获得 Number 的最大使用值
- 如何添加新
Data
对象 - 如何保存更改。
以下代码将完成这项工作。它只会查询一次最大数量,并且只会保存一次更改。因此,它比您的解决方案更有效。
// get the current maximum number:
var maxNumber = myDbContext.MyItems.Select(myItem => myItem.Number).Max();
// create objects with a proper value for Number:
var objectsToAdd = Enumerable.Range(1, 10) // from numbers 1..10
.Select(i => new Data() // make a new Data object
{
Number = maxNumber + i, // with value of Number = maxNumber + i
})
.ToList();
// add the created objects and save the changes
foreach (Data objectToAdd in objectsToAdd)
{
_context.Add(objectToAdd
}
// Perhaps there is a _context.AddRange(...)?
_context.SaveChanges();
请注意,此方法仅在同时没有其他人添加 Number 大于 的 Data 时才能正常工作maxNumber
。但是您的方法也有这个缺点:在查询您maxNumber
和SaveChanges
其他人之间可能已经添加了Data
推荐阅读
- c# - Stream.Read 返回 System.IO.IOException
- fastapi - 如何从 Poetry 运行 FastAPI 应用程序?
- javascript - 如何在异步生成器函数中抛出错误
- java - 优化数据模型和存储库 SpringBoot
- android - RecyclerView OnLayout 耗时太长,性能问题
- apache-kafka - 通过 Kafka Connect for Apache Ignite 进行 DC 复制
- angular - TypeError:未定义的属性(Angular)
- mysql - 有没有办法在 MySQL 的列中索引多个值
- mongodb - MongoDB Atlas Search:自动完成,分数模糊
- android - 如何在 Android 中以编程方式更改 ListView 项?