如何防止 Automapper 替换实体框架拥有的实体?

理查德·科莱特

我有两种类型。位置和位置有一个地址。地址被指定为拥有的实体,使用

class LocationConfiguration : IEntityTypeConfiguration<Location>
{
    public void Configure(EntityTypeBuilder<Location> builder)
    {
        builder.HasKey(location => new { location.SubscriptionId, location.Id });
        builder.OwnsOne(location => location.Address);
    }
}

我正在获取现有的 Location 实体并使用 Automapper 映射更新的值。

[HttpPut("{subscriptionId}/{locationId}")]
public async Task<IActionResult> SaveLocationAsync(string subscriptionId, long locationId, [FromBody] Location location)
{
    if (location == null || location.Id != locationId || location.SubscriptionId != subscriptionId)
    {
        return BadRequest();
    }
    var dbLocation = await locations.GetLocationAsync(subscriptionId, locationId);
    if (dbLocation == null)
    {
        return NotFound();
    }
    mapper.Map<Location, Location>(location, dbLocation);
    return Ok(await locations.SaveAsync(dbLocation));
}

我通过打电话来节省 context.SaveChangesAsync();

但我收到错误

InvalidOperationException:无法跟踪实体类型“Location.Address#Address”的实例,因为已跟踪具有键值“LocationSubscriptionId:123, LocationId:1”的另一个实例。替换拥有的实体时,修改属性而不更改实例或首先分离先前拥有的实体条目。

我怀疑 Automapper 正在替换 Location 的 Address 属性,而不是向下导航并单独替换 Address 的属性。

有没有办法让 Automapper 对属性值进行更精细的复制?

伊万·斯托耶夫

您应该在所有者类型映射配置中配置此类属性UseDestinationValue

UseDestinationValue 告诉 AutoMapper 不要为某个成员创建新对象,而是使用目标对象的现有属性。

此外,如果您在示例中使用自映射,请确保为每个拥有的类型创建显式自映射。

对于您的示例,所需行为的最小 AutoMapper 配置如下:

cfg.CreateMap<Address, Address>();

cfg.CreateMap<Location, Location>()
    .ForMember(dest => dest.Address, opt => opt.UseDestinationValue());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架-如何防止模型属性创建列?

来自分类Dev

Automapper延迟加载。实体框架

来自分类Dev

具有预先创建的映射的AutoMapper子实体

来自分类Dev

AutoMapper条件实体映射

来自分类Dev

如何防止ColdFusion转换HTML实体?

来自分类Dev

实体框架如何工作

来自分类Dev

使用实体框架保存AutoMapper映射的实体集合

来自分类Dev

实体框架6防止删除

来自分类Dev

如何通用的Automapper配置

来自分类Dev

如何防止实体框架加载所有子对象

来自分类Dev

如何更新现有的断开连接的实体

来自分类Dev

如何防止Dart xml包解码实体?

来自分类Dev

如何使用实体框架核心3.1.1为拥有的实体类型设置复合主键?

来自分类Dev

实体框架核心,是否只返回与Automapper相关的ID?

来自分类Dev

防止Automapper创建具有空值的对象属性

来自分类Dev

在AutoMapper和实体框架中进行算术

来自分类Dev

如何使用Automapper函数调用递归映射实体以查看模型?

来自分类Dev

Automapper延迟加载。实体框架

来自分类Dev

具有预先创建的映射的AutoMapper子实体

来自分类Dev

拥有实体时如何检索Key <T>?

来自分类Dev

如何防止ColdFusion转换HTML实体?

来自分类Dev

实体框架映射的AutoMapper绑定问题

来自分类Dev

您如何渴望加载一个实体可能拥有的所有子集合?

来自分类Dev

使用Automapper将实体框架类映射到业务类

来自分类Dev

实体框架如何工作

来自分类Dev

如何在实体框架中拥有一个只有外键的表

来自分类Dev

Automapper,实体框架更新数据库

来自分类Dev

带有 AutoMapper 的实体框架中的嵌套查询

来自分类Dev

如何在拥有的实体中定义关系属性的名称

Related 相关文章

热门标签

归档