【发布时间】:2019-09-19 17:02:24
【问题描述】:
假设我有一个实体Vehicle,它通过TypeId 引用另一个实体Type。我想使用实体框架更新Vehicle,但我不想更新TypeId(或Type)。
问题是实体框架想要更新整个图,结果是Type 实体的属性在更新Vehicle 时被空值覆盖。
我想我可以在更新之前从数据源中获取Type 实体,但似乎没有必要对数据库进行两次额外调用(读取和保存)来更新不需要更新的实体。
我宁愿从图中分离Vehicle 实体,只更新这个实体。我怎样才能做到这一点?
编辑:
这里有一些代码可以让问题更清楚:
public async Task Update(Vehicle entity)
{
var dataEntity = mapper.Map<VehicleDataEntity>(entity);
await repository.Update(entity.Id, dataEntity);
}
如您所见,数据实体在映射期间被实例化(使用 Automappar)。
更新在一个简单的通用存储库中完成:
public async Task Update(Guid id, TEntity entity)
{
dbContext.Set<TEntity>().Update(entity);
await dbContext.SaveChangesAsync();
}
这是数据模型:
public class VihecleDataEntity : IEntity
{
[Key]
public Guid Id { get; set; }
public string Description { get; set; }
public VihecleTypeEntity Type { get; set; }
}
public class VihecleTypeEntity: IEntity
{
[Key]
public Guid Id { get; set; }
public string Description { get; set; }
}
【问题讨论】:
-
你能粘贴一些代码吗?听起来您有一个与错误更新值有关的错误。分离实体是您几乎从不需要做的事情。
-
@BradM 感谢您的回复。按要求添加代码。
-
代码仍然没有意义。请发布完整的回购,包括您的自动映射器地图。例如,
id是未使用的参数。我最初的猜测是你的自动映射器代码有一个错误。更好的是,只需创建一个没有自动映射器的 repo。您也不应该将任何模型映射到数据实体。
标签: c# .net-core entity-framework-core