无法跟踪实体类型“ Bus”的实例,因为已经跟踪了另一个具有相同{{Id}}关键字值的实例

时间:2020-06-26 10:27:55

标签: c# sql-server asp.net-core .net-core entity-framework-core

我的项目中有Expedition实体。

     [Table("Expeditions")]
     public class Expedition
{

       public int Id { get; set; }
       public Bus Bus { get; set; }
       [ForeignKey("Bus")]
       public int BusId { get; set; }
}

并且Expedition实体具有外键。来自公交车实体的外键。

我使用前端的信息创建一个EpeditionDTO。尝试将ExpeditionDTO转换为Expedition并将其添加到数据库中。

public void Add(ExpeditionDTO item)
        {
            try
            {
                Bus Bus = _mapper.Map<Bus>(item.Bus);
                var expedition = new Expedition()
                {
                    Id = item.Id,
                    Bus = Bus,
                    BusId = Bus.Id
                };
                _expeditionRepository.Add(expedition);
                _unitOfWork.Save();
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

还有我的Add方法:

public virtual void Add(T Entity)
        {
            _context.Add<T>(Entity);
        }

当我尝试此操作时,出现此错误。

无法跟踪实体类型“ Bus”的实例,因为已经跟踪了另一个具有相同“ {'Id”}键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用“ DbContextOptionsBuilder.EnableSensitiveDataLogging”来查看冲突的键值。

我该如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

ou应该仅通过BusId

var expedition = new Expedition()
                {
                    Id = item.Id,
                    BusId = Bus.Id
                };