Entity Framework 插入带有外键的数据,重新添加了外建表里的数据

在使用EF Code First Mode开发时插一条带有关联实体B的数据A时,大多数情况下,业务逻辑上都是要插入数据A,而B在插入数据前已经存在,只是B的主键是A的外键,在设计A实体时,包含了一个实体B对象,导致在插入数据A时,需要传入一个A.B的实体对象, 但是在插入A的过程中,B也被当作一个新的实体插入到表B里了,这不是我们想要的结果,经查找资料,找到了一个解决方案(也许不是最好的但是有效就足矣),就是在Service层Insert方法调用repository的地方,插数据A前,根据A.B.Id[B的主键]去Repository找一下实体B,再将B重新赋值给A,将A和B两个实体数据形成关联关系,在插数据的时候就可以达到期望结果了。

示例代码

public int Insert(RecordDto record)
{
      var user = _userepository.GetById(record.CreateBy.Id);
      record.CreateBy = user;
      var costType = _costTypeRepository.GetById(record.CostType.Id);
      record.CostType = costType;
      var r = _mapper.Map<RecordDto, Record>(record);
      _repository.Insert(r);
      return _repository.UnitOfWork.Save();
}
posted @ 2018-09-05 13:21  不酸不菜不多鱼  阅读(866)  评论(0编辑  收藏  举报