简体   繁体   English

实体框架只插入一条记录

[英]Entity Framework inserts only one record

I'm saving a record in my database by passing 3 parameters, the number parameter is passed to pick the number of records from one table to another table.我通过传递 3 个参数在我的数据库中保存一条记录,传递 number 参数以选择从一个表到另一个表的记录数。 However the loop written inserts only 1 record instead of the number parameter passed.然而,循环写入仅插入 1 条记录,而不是传递的数字参数。

I'm using the the Take() method in Entity Framework to pick the records.我正在使用实体框架中的Take()方法来选择记录。 It inserts only the last records in the loop它只插入循环中的最后一条记录

public async Task<bool> Save(string company, int number, string registrationNumber)
{
    using (var trans = _dbContext.Database.BeginTransaction())
    {
        var db = new SibaCiidDbContext();
        var dbSet = _dbContext.Set<IntermediaryAssignment>();

        // pick number of records 
        var data = await (from s in db.StickerDistributions
                          where s.Dispatched == false &&  
                                s.CompanyCode == company
                          select s).Take(number).ToListAsync();

        var intermediary = (await _repo.FindBy(s => s.RegistrationNumber  == registrationNumber && 
                                                    s.Status == EntityStatus.Active)).FirstOrDefault();

        var entity = new IntermediaryAssignment();

        foreach (var sticker in data)
        {
            entity.CompanyCode = sticker.CompanyCode;
            entity.StickerCode = sticker.StickerCode;
            entity.RegistrationNumber = intermediary.RegistrationNumber;
            entity.Status = EntityStatus.Active;
            entity.CreatedDate = DateTime.Now;
            entity.Dispatched = false;
            entity.IntermediaryType = intermediary.IntermediaryType;

            dbSet.Add(entity);
        }

        trans.Commit();

        return  await _dbContext.SaveChangesAsync() > 0;
    }
}

You are creating one entity, and then updating it 3 times.您正在创建一个实体,然后将其更新 3 次。 You need to create a new entity for each new record.您需要为每条新记录创建一个新实体。

Move the new IntermediaryAssignment() inside the loop.new IntermediaryAssignment()移动到循环内。

     foreach (var sticker in data)
     {
            var entity = new IntermediaryAssignment();


            entity.CompanyCode = sticker.CompanyCode;
            entity.StickerCode = sticker.StickerCode;
            entity.RegistrationNumber = intermediary.RegistrationNumber;
            entity.Status = EntityStatus.Active;
            entity.CreatedDate = DateTime.Now;
            entity.Dispatched = false;
            entity.IntermediaryType = intermediary.IntermediaryType;


            dbSet.Add(entity);

        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM