Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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/8/svg/2.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未映射具有可查询扩展的导航属性_C#_Entity Framework_Automapper - Fatal编程技术网

C# Automapper未映射具有可查询扩展的导航属性

C# Automapper未映射具有可查询扩展的导航属性,c#,entity-framework,automapper,C#,Entity Framework,Automapper,我有两门课(例如简化课程): 在这一行: var _modelProduct = Mapper.Map<Models.Product>(_product); var\u modelProduct=Mapper.Map(\u product); 所以我猜“ProjectTo”不适用于Data.Provider=>Models.Provider,因为这个错误,但它只是不适用于那个 我不知道在这里该怎么办。我在这些类中还有其他对象或对象列表,比如AssetType和Login,这些

我有两门课(例如简化课程):

在这一行:

  var _modelProduct = Mapper.Map<Models.Product>(_product);
var\u modelProduct=Mapper.Map(\u product);
所以我猜“ProjectTo”不适用于Data.Provider=>Models.Provider,因为这个错误,但它只是不适用于那个

我不知道在这里该怎么办。我在这些类中还有其他对象或对象列表,比如
AssetType
Login
,这些都很好,但是我不知道为什么这个会导致这个错误,我甚至不知道从哪里开始


我使用的是实体框架6。Automapper 6.1.1.0和Automapper for EF6。

这是一个递归错误。我不能在一个产品上同时有一个提供商和一个提供商上的产品列表。自动映射无法映射到无穷大。。。所以我忽略了提供者上的
列表,现在它可以工作了

编辑:

您可以像这样将
MaxDepth
ProejctTo
一起使用:

cfg.CreateMap()
.ForMember(m=>m.Provider,opt=>opt.Ignore())
.MaxDepth(1)
.ReverseMap();
cfg.CreateMap()
.AfterMap((src,dest)=>
{
foreach(目标产品中的var i)
i、 提供者=目的地;
})
.MaxDepth(1)
.ReverseMap();
但这只会让你从一个产品中得到一个提供者或一个提供者的产品列表,它不会让你从一个产品中得到一个提供者的产品列表

✔ <代码>提供者
=>
列表

✔ <代码>产品=>
提供商

X
产品
=>
提供商
=>
列表


我没有尝试过在没有
ProjectTo
的情况下
preserverences
,但是根据AM指南,它应该是6.1.0自动的。无论如何,我想使用'ProjectTo',1的深度对我来说很好

“提供程序对象/导航属性不会出现”-因为您已将AM设置为使用
.formMember(m=>m.Provider,opt=>opt.Ignore())
@IvanStoev下面的映射应该为每个产品添加一个提供程序。映射
提供程序
查询时,但映射
Product
query时不会。当然,AfterMap不适用于ProjectTo。是的,您可以:)参见。在单个LINQ to Entities查询中,仍然会在两个结构不兼容的初始化中显示“产品类型”。错误,因此这不起作用。我尝试了
MaxDepth
preserverences
的各种方法和各种组合。。。还是有那个错误,我想你用ProjectTo。PrevierReference对此没有帮助。MaxDepth可以,但并不总是可能。尝试手动将LINQ从实体写入DTO。如果你能做到,那就是一个AM错误。否则,在这种情况下是不可能的。
cfg.CreateMap<Product, Models.Product>()
.ForMember(m => m.Provider, opt => opt.Ignore())
.ReverseMap();

cfg.CreateMap<Provider, Models.Provider>()
.AfterMap((src, dest) =>
{
    foreach (var i in dest.Product)
        i.Provider = dest;
})
.ReverseMap();
 public IQueryable<Product> GetProducts(int LoginId)
 {
     return adapter.GetProducts(LoginId).ProjectTo<Product>();
 }
return adapter.GetProducts(LoginId).ToProductModelList();

public static List<Models.Product> ToProductModelList(this IQueryable<Data.Product> _products)
{
    var _list = new List<Models.Product>();
    foreach (var _product in _products)
    {
        var _modelProduct = Mapper.Map<Models.Product>(_product);
        _list.Add(_modelProduct);
    }
    return _list;
}
Error mapping types.

Mapping types:
Provider -> Provider
ASG.Library.Data.Provider -> ASG.Library.Common.Models.Provider

Type Map configuration:
Provider -> Provider
ASG.Library.Data.Provider -> ASG.Library.Common.Models.Provider

Property:
Product
  var _modelProduct = Mapper.Map<Models.Product>(_product);
cfg.CreateMap<Product, Models.Product>()
.ForMember(m => m.Provider, opt => opt.Ignore())
.MaxDepth(1)
.ReverseMap();

cfg.CreateMap<Provider, Models.Provider>()
.AfterMap((src, dest) =>
{
    foreach (var i in dest.Product)
        i.Provider = dest;
})
.MaxDepth(1)
.ReverseMap();