【发布时间】: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