我想将多个对象以递增编号(MAX + 1)保存到数据库。 当我只保存一个对象时,它可以正常工作,但是当我保存多个对象时,所有对象都具有相同的编号。这是我的代码:
for(int i = 0; i< 10; i++){
_context.Add(new Data(){Number = _context.Max(d => d.Number) + 1});
_context.SaveChanges();
}
如何将具有不同编号的多个对象保存到数据库?谢谢
答案 0 :(得分:0)
通常,如果人们在没有适当规范的情况下询问实体框架问题,那么它们的意思是带有_context
和DbContext
对象之类的标识符。但是,System.Data.Entity.DbContext
没有Add
函数。因此,我不确定您的_context
对象代表什么。也许下次您会给出适当的规格。
幸运的是,您向我们展示了我们需要的三个功能:
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();
请注意,只有在此期间没有其他人添加数字大于maxNumber
的数据时,此方法才能正确运行。但是您的方法还有一个缺点:在查询maxNumber
和SaveChanges
之间,可能有人添加了Data