【问题标题】:ASP.NET MVC 2 and AutoMapper - dissecting and mapping uploaded file info with AutoMapperASP.NET MVC 2 和 AutoMapper - 使用 AutoMapper 剖析和映射上传的文件信息
【发布时间】:2011-05-24 03:57:35
【问题描述】:

这是对这个问题的第三次重大修改,所以我将先写一个简短的小总结,然后提出问题。

我有一个输入/编辑模型,我计划将其用于支持 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; }
}

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

我可以用 AutoMapper 做到这一点吗?如果是这样,任何人都可以提供一些代码指导吗?


编辑:

部分问题在于我的模型相当复杂,因为它包含多对多关系。 PlatformID 最终用于在游戏/平台地图中构建/重建(取决于我是创建还是更新实体)链接的平台实体。我不确定 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);
}

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

【问题讨论】:

    标签: c# asp.net-mvc-2 automapper


    【解决方案1】:

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

    在调用 AutoMapper 之前确保您的对象具有正确的值。

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

    如果这不能回答问题,请发布更多代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多