Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AutoMapper无法从实体模型转换为viewmodel_C#_Entity Framework_Asp.net Core Mvc_Automapper - Fatal编程技术网

C# AutoMapper无法从实体模型转换为viewmodel

C# AutoMapper无法从实体模型转换为viewmodel,c#,entity-framework,asp.net-core-mvc,automapper,C#,Entity Framework,Asp.net Core Mvc,Automapper,我只是按照安装和设置AutoMapper,我想我已经正确设置了它。但当我尝试从IEnumerable映射到IEnumerable时,如下所示: var categories = _context.ProductCategories.Include(e => e.Children).ToList(); var topLevelCategories = categories.Where(e => e.ParentId == null); var VMCategory = _mapper

我只是按照安装和设置AutoMapper,我想我已经正确设置了它。但当我尝试从
IEnumerable
映射到
IEnumerable
时,如下所示:

var categories = _context.ProductCategories.Include(e => e.Children).ToList();
var topLevelCategories = categories.Where(e => e.ParentId == null);
var VMCategory = _mapper
    .Map<IEnumerable<ProductCategory>, 
        IEnumerable<ViewModelProductCategory>>(topLevelCategories);
return View(VMCategory);
。。。这是_CategoryRecursive.cshtml:

@model IEnumerable<MyStore.Models.ViewModels.ViewModelProductCategory>
<ul style="list-style:none;padding-left:0px;">
   @if (Model != null)
    {
        foreach (var item in Model)
        {
            <li style="margin:8px 0px 0px 0px;">
                <ul>
                    @Html.Partial("_CategoryRecursive.cshtml", item.Children)
                </ul>
            </li>
        }
    }
</ul>
@model IEnumerable
    @如果(型号!=null) { foreach(模型中的var项目) {
    • @Html.Partial(“_CategoryRecursive.cshtml”,item.Children)
  • } }
映射配置文件:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<ProductCategory, ViewModelProductCategory>();
        CreateMap<ViewModelProductCategory, ProductCategory>();
        CreateMap<Product, ViewModelProduct>();
        CreateMap<ViewModelProduct, Product>();
    }
}
公共类映射配置文件:配置文件
{
公共映射配置文件()
{
CreateMap();
CreateMap();
CreateMap();
CreateMap();
}
}
实体模型:

public class ProductCategory
{
    public int Id { get; set; }
    public int SortOrder { get; set; }
    public string Title { get; set; }

    [ForeignKey(nameof(ParentCategory))]
    public int? ParentId { get; set; }

    public ProductCategory ParentCategory { get; set; } //nav.prop to parent
    public ICollection<ProductCategory> Children { get; set; } //nav. prop to children

    public List<ProductInCategory> ProductInCategory { get; set; }
}
公共类ProductCategory
{
公共int Id{get;set;}
公共int排序器{get;set;}
公共字符串标题{get;set;}
[ForeignKey(姓名(父类别))]
public int?ParentId{get;set;}
public ProductCategory ParentCategory{get;set;}//nav.prop到父级
公共ICollection子项{get;set;}//nav.prop到子项
公共列表ProductInCategory{get;set;}
}
视图模型:

public class ViewModelProductCategory
{
    public int Id { get; set; }
    public int? ParentId { get; set; }
    public string Title { get; set; }
    public int SortOrder { get; set; }

    public string ProductCountInfo
    {
        get
        {
            return Products != null && Products.Any() ? Products.Count().ToString() : "0";
        }
    }

    public ProductCategory ParentCategory { get; set; } // Nav.prop. to parent
    public IEnumerable<ProductCategory> Children { get; set; } // Nav.prop. to children

    public List<ViewModelProduct> Products { get; set; } // Products in this category
    public List<ViewModelProduct> OrphanProducts { get; set; } // Products with no references in ProductInCategory
}
公共类ViewModelProductCategory
{
公共int Id{get;set;}
public int?ParentId{get;set;}
公共字符串标题{get;set;}
公共int排序器{get;set;}
公共字符串ProductCountInfo
{
得到
{
返回产品!=null&&Products.Any()?Products.Count().ToString():“0”;
}
}
public ProductCategory ParentCategory{get;set;}//Nav.prop.to parent
public IEnumerable Children{get;set;}//Nav.prop.to Children
公共列表产品{get;set;}//此类别中的产品
公共列表产品{get;set;}//ProductInCategory中没有引用的产品
}
这里的问题:

var VMCategory = _mapper.Map<IEnumerable<ViewModelProductCategory>, IEnumerable<ProductCategory>>(topLevelCategories);
var VMCategory=\u mapper.Map(topLevelCategories);
您应该将代码更改为

var VMCategory = _mapper.Map<IEnumerable<ProductCategory>, IEnumerable<ViewModelProductCategory>>(topLevelCategories);
var VMCategory=\u mapper.Map(topLevelCategories);
说明:
tdestinition=Map(TSource sourceObject)
,但是您交换了括号内的类型
TSource
tdestinition
,发布了完整的异常消息。可能有一些内在的例外可以解释问题所在。使用
Exception.ToString()
获取它。这里没有异常消息。Visual Studio正在给出错误,阻止生成。谢谢!现在我又前进了一步,但又面临着另一个错误。请参阅更新的OP.A viewModel的Children属性中的问题。现在您使用集合
IEnumerable
,但我在配置中看到,它必须是
ViewModelProductCategory
,或者您应该创建类似
CreateMap()
的映射规则。属性
ParentCategory
var VMCategory = _mapper.Map<IEnumerable<ProductCategory>, IEnumerable<ViewModelProductCategory>>(topLevelCategories);