ASP.NET MVC 2 和 AutoMapper - 使用 AutoMapper 剖析和映射上传的文件信息

本文关键字:AutoMapper 映射 信息 文件 使用 MVC NET ASP | 更新日期: 2023-09-27 17:57:17

这是这个问题的第三次主要编辑,所以我先写一个简短的小总结,然后再问这个问题。

有一个输入/编辑模型,我计划与 EF4 支持的 MVC 2 站点一起使用。 模型如下:

public class AdminGameEditModel
{
    [Required]
    public int GameID { get; set; }
    [Required(ErrorMessage="A game must have a title")]
    public string GameTitle { get; set; }
    [Required(ErrorMessage="A short URL must be supplied")]
    public string ShortURL { get; set; }
    [Required(ErrorMessage="A box art image must be supplied")]
    public HttpPostedFileBase BoxArt { get; set; }
    [Required(ErrorMessage="A large image for the index page is required")]
    public HttpPostedFileBase IndexImage { get; set; }
    [Required(ErrorMessage="A game must have a review")]
    public string ReviewText { get; set; }
    [Required(ErrorMessage="A game must have a score")]
    public int ReviewScore { get; set; }
    [Required(ErrorMessage="A game must have at least one Pro listed")]
    public string[] Pros { get; set; }
    [Required(ErrorMessage="A game must have at least one Con listed")]
    public string[] Cons { get; set; }
    [Required(ErrorMessage="A game must belong to a genre")]
    public int GenreID { get; set; }
    [Required(ErrorMessage="A game must be associated with at least one platform")]
    public int[] PlatformIDs { get; set; }
}

我想将其映射到游戏实体以进行创建/更新。 不过,有一个障碍 - 我需要将图像保存在特定文件夹中,然后采用它们的路径并将其保存为我的实体中的属性。 因此,为了清楚起见,举个例子:我的游戏实体没有实际的 BoxArt 图像,而是具有指向正确 BoxArt 图像的路径。 我希望这是有道理的。 如果我需要澄清,请告诉我。

我可以使用自动映射器执行此操作吗? 如果是这样,任何人都可以提供一些代码指导吗?


编辑:

部分问题在于我的模型相当复杂,因为它包含多对多关系。 平台 ID 最终用于在游戏/平台地图中构建/重建(取决于我是创建还是更新实体)链接的平台实体。 我不确定AutoMapper是否可以在不通过我的存储库的情况下做一些复杂的事情。

然后是图像路径的问题。 路径不是HttpPostedFileBase的属性,但必须像这样手动构造:

if (BoxArt.ContentLength > 0) {
    var fileName = Path.GetFileName(BoxArt.FileName);
    var path = Path.Combine(Server.MapPath("~/Content/Images/BoxArt"), fileName);
    BoxArt.SaveAs(path);
}

因此,我正在寻找的不仅仅是尝试跨对象映射简单属性更复杂。 我想在我的存储库保留对我的编辑模型的引用。 关注点分离等等。 因此,我需要先映射到实体,然后再尝试将其传递给我的存储库进行保存。 我只是不确定如何在不混合应用程序层的情况下做到这一点。

ASP.NET MVC 2 和 AutoMapper - 使用 AutoMapper 剖析和映射上传的文件信息

如果我理解你,你需要做的就是在调用AutoMapper之前先更新你的属性。

调用自动映射程序之前,请确保对象具有正确的值。

调用执行映射后,目标对象将复制所有匹配的属性。

如果这不能回答问题,请再发布一些代码。