gpt4 book ai didi

c# - Automapper 中的不一致行为

转载 作者:太空狗 更新时间:2023-10-30 00:53:46 25 4
gpt4 key购买 nike

我的项目中发生了非常奇怪的事情,我有一个非常简单的 CLR 对象,第一个是 Model,另一个是 ViewModel,在我编译项目后,我运行我的 WebApi ASP.NET 项目,使用所需的参数,我可以看到我的 Model 返回了数据。

一旦我看到 Mapper 映射正常,第二次它返回所有带有空值的东西。并非一直发生的问题。

非常重要:更新 14.03.2013
当我回收应用程序时它就停止了,但过了一会儿它又开始这样做了,我重新保存了 web.config 文件然后又好了。

这是我的模型/ View 模型:

public class Gallery : Entity
{
public override long Id { get; set; }
public virtual Settings SiteOwner { get; set; }
public virtual Category Category { get; set; }
public virtual string PageTitle { get; set; }
public virtual string TitleDescription { get; set; }
public virtual string GalleryTitle { get; set; }
public virtual IList<UIItem> GalleryItems { get; set; }
}

public class UIItem : Entity
{
public override long Id { get; set; }
public virtual Product Product { get; set; }
public virtual Gallery Gallery { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual string Price { get; set; }
public virtual string ImageUrl { get; set; }
public virtual string VideoUrl { get; set; }
public virtual string FileUrl { get; set; }
}
public class GalleryViewModel
{
public virtual string PageTitle { get; set; }
public virtual string TitleDescription { get; set; }
public virtual string GalleryTitle { get; set; }
public virtual IList<UIItemViewModel> GalleryItems { get; set; }
}

public class UIItemViewModel
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
public virtual string Price { get; set; }
public virtual string ImageUrl { get; set; }
public virtual string VideoUrl { get; set; }
public virtual string FileUrl { get; set; }
}

我是这样用的

// my apicontroller

// FindGalleryByAppIdAndCategoryId returns => Gallery
var source = _galleryRepository.FindGalleryByAppIdAndCategoryId(appId, catId);
return Mapper.DynamicMap<GalleryViewModel>(source);

最佳答案

  1. 为什么用 virtual 关键字标记非导航属性?只有涉及一对一、一对多、多对多和复杂类型关系的属性才可以用 virtual 关键字标记以应用延迟加载.

2.

Mapper.CreateMap<UIItem,UIItemViewModel>();
...
UIItemViewModel result = Mapper.Map<UIItem,UIItemViewModel>(your UIItem);

如果你需要特殊的映射逻辑,你可以这样做:

Mapper.CreateMap<UIItem,UIItemViewModel>().ConvertUsing(new ModelToViewModelConverter());
...
UIItemViewModel result = Mapper.Map<UIItem,UIItemViewModel>(your UIItem);
...

转换器看起来像这样:

public class ModelToViewModelConverter : ITypeConverter<UIItem,UIItemViewModel>
{
public UIItemViewModel Convert(ResolutionContext context)
{
UIItem item = (UIItem)context.SourceValue;
// Perform your convertion logic
}
}

以同样的方式,您可以将所有实体甚至集合映射到集合。

关于c# - Automapper 中的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175029/

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