gpt4 book ai didi

c# - AutoMapper 需要获取访问器来设置。 CS0154 属性或索引器 'Id' 不能在此上下文中使用,因为它缺少获取访问器

转载 作者:行者123 更新时间:2023-11-30 23:11:11 25 4
gpt4 key购买 nike

可以设置我的 ViewModel 类中的 Id 属性,但无法获取,因为 setter 会加密该值。要获取值,我必须使用 GetEncryptedId()GetDecryptedId()

ViewModel

public ViewModel
{
public int _id;
public int Id { set { _id = Encrypt(value); }
public Child ChildProperty {get; set; }
}

public Child
{
public int Id {get; set;}
public string Name {get; set; }
}

这里的问题是,出于某种原因,Auto Mapper 需要一个 get 访问器,以便它可以设置一个值。

public ViewModelProfile()
{
CreateMap<Model, ViewModel>().ForMember(vm => vm.Id, opt => opt.MapFrom(m => m.ChildProperty.Id))
}

这会引发错误并说明:

CS0154 The property or indexer 'Id' cannot be used in this context because it lacks the get accessor.
  1. 为什么 Auto Mapper 需要“获取访问器”来设置值。
  2. 是否有强制设置但不获取的配置选项?

作为解决方法,我添加了一个 Get { return -1; },但这远非理想。

最佳答案

这不是 AutoMapper 本身的限制,而是其 API 结构方式的限制。表达式树 vm => vm.Id 无法构造,因为您已经猜到了,这是对属性 getter 的引用,这是不可能的,因为没有 getter。将表达式树作为引用成员的强类型方式传递是一种标准技术;到目前为止,AutoMapper 并不是唯一会遇到问题的东西。在这种情况下,AutoMapper 最终不会调用 getter 这一事实并不重要。

幸运的是,ForMember 有一个覆盖接受成员名称作为字符串,使用它可以避免表达式树的问题:

CreateMap<Model, ViewModel>()
.ForMember(nameof(ViewModel.Id), opt => opt.MapFrom(m => m.ChildProperty.Id))

关于c# - AutoMapper 需要获取访问器来设置。 CS0154 属性或索引器 'Id' 不能在此上下文中使用,因为它缺少获取访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44889370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com