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();
}