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

本文介绍在使用EF CodeFirst模式开发时,如何避免在插入带有已存在关联实体的数据时,误将关联实体作为新记录插入的问题,并提供一种有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/Mxy-cnblog/p/9591560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值