首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自动映射程序缺少类型映射配置或不支持的映射-错误

自动映射程序缺少类型映射配置或不支持的映射-错误
EN

Stack Overflow用户
提问于 2013-02-04 06:08:19
回答 13查看 247.8K关注 0票数 108

实体模型

代码语言:javascript
复制
public partial class Categoies
{
    public Categoies()
    {
        this.Posts = new HashSet<Posts>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public Nullable<int> PositionId { get; set; }

    public virtual CategoryPositions CategoryPositions { get; set; }
    public virtual ICollection<Posts> Posts { get; set; }
}

查看模型

代码语言:javascript
复制
public class CategoriesViewModel
{
    public int Id { get; set; }

    [Required(ErrorMessage = "{0} alanı boş bırakılmamalıdır!")]
    [Display(Name = "Kategori Adı")]
    public string Name { get; set; }

    [Display(Name = "Kategori Açıklama")]
    public string Description { get; set; }

    [Display(Name = "Kategori Pozisyon")]
    [Required(ErrorMessage="{0} alanı boş bırakılmamalıdır!")]
    public int PositionId { get; set; }
}

CreateMap

代码语言:javascript
复制
Mapper.CreateMap<CategoriesViewModel, Categoies>()
            .ForMember(c => c.CategoryPositions, option => option.Ignore())
            .ForMember(c => c.Posts, option => option.Ignore());

地图

代码语言:javascript
复制
[HttpPost]
public ActionResult _EditCategory(CategoriesViewModel viewModel)
{
    using (NewsCMSEntities entity = new NewsCMSEntities())
    {
        if (ModelState.IsValid)
        {
            try
            {
                category = entity.Categoies.Find(viewModel.Id);
                AutoMapper.Mapper.Map<CategoriesViewModel, Categoies>(viewModel, category);
                //category = AutoMapper.Mapper.Map<CategoriesViewModel, Categoies>(viewModel);
                //AutoMapper.Mapper.Map(viewModel, category);
                entity.SaveChanges();

                // Veritabanı işlemleri başarılı ise yönlendirilecek sayfayı 
                // belirleyip ajax-post-success fonksiyonuna gönder.
                return Json(new { url = Url.Action("Index") });
            }
            catch (Exception ex)
            {

            }
        }

        // Veritabanı işlemleri başarısız ise modeli tekrar gönder.
        ViewBag.Positions = new SelectList(entity.CategoryPositions.ToList(), "Id", "Name");
        return PartialView(viewModel);
    }
}

错误

缺少类型映射配置或不支持的映射。映射类型: Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D NewsCMS.Areas.Admin.Models.CategoriesViewModel System.Data.Entity.DynamicProxies.Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D CategoriesViewModel -> ->

目的路径: Categoies_7314E98C41152985A4218174DDDF658046BC82AB0ED9E1F0440514D79052F84D

源值: NewsCMS.Areas.Admin.Models.CategoriesViewModel

我遗漏了什么?我试着找,但我看不到问题。

更新

我已经在Global.asax的application_start中指定了

代码语言:javascript
复制
protected void Application_Start()
{
    InitializeAutoMapper.Initialize();
}

InitializeClass

代码语言:javascript
复制
public static class InitializeAutoMapper
{
    public static void Initialize()
    {
        CreateModelsToViewModels();
        CreateViewModelsToModels();
    }

    private static void CreateModelsToViewModels()
    {
        Mapper.CreateMap<Categoies, CategoriesViewModel>();
    }

    private static void CreateViewModelsToModels()
    {
        Mapper.CreateMap<CategoriesViewModel, Categoies>()
            .ForMember(c => c.CategoryPositions, option => option.Ignore())
            .ForMember(c => c.Posts, option => option.Ignore());
    }
}
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2013-02-04 07:35:11

我找到了解决方案,感谢大家的回复。

代码语言:javascript
复制
category = (Categoies)AutoMapper.Mapper.Map(viewModel, category, typeof(CategoriesViewModel), typeof(Categoies));

但是,我已经不知道原因了。我不能完全理解。

票数 6
EN

Stack Overflow用户

发布于 2013-02-04 06:48:09

您在哪里指定了映射代码(CreateMap)?参考:Where do I configure AutoMapper?

如果您使用的是静态映射器方法,每个AppDomain应该只进行一次配置。这意味着放置配置代码的最佳位置是应用程序启动,比如ASP.NET应用程序的Global.asax文件。

如果在调用Map方法之前没有注册配置,您将收到Missing type map configuration or unsupported mapping.

票数 71
EN

Stack Overflow用户

发布于 2014-11-13 19:54:18

在您的类AutoMapper配置文件中,您需要为您的实体和视图模型创建一个映射。

ViewModel到域模型的映射:

这通常是在AutoMapper/DomainToViewModelMappingProfile

Configure()中,添加一行,如下所示

代码语言:javascript
复制
Mapper.CreateMap<YourEntityViewModel, YourEntity>();

域模型到ViewModel的映射:

ViewModelToDomainMappingProfile中,添加:

代码语言:javascript
复制
Mapper.CreateMap<YourEntity, YourEntityViewModel>();

Gist example

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14677889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档