C#映射多对多错误外键的自动映射问题

C#映射多对多错误外键的自动映射问题,c#,automapper,C#,Automapper,我遇到了一个奇怪的问题,将模型映射到具有多对多关系的实体 我有以下实体和模型: 使用系统; 使用系统诊断; 使用System.Collections.Generic; 命名空间AutoMapper.reproductedExample { 公共类存储实体 { 公共int Id{get;set;} 公共字符串名称{get;set;} 公共列表产品{get;set;}=new List(); } 公共类ProductEntity { 公共int Id{get;set;} 公共字符串名称{get;se

我遇到了一个奇怪的问题,将模型映射到具有多对多关系的实体

我有以下实体和模型:

使用系统;
使用系统诊断;
使用System.Collections.Generic;
命名空间AutoMapper.reproductedExample
{
公共类存储实体
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表产品{get;set;}=new List();
}
公共类ProductEntity
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表存储{get;set;}=new List();
}
公共类StoreProductEntity
{
public int StoreId{get;set;}
公共存储实体存储{get;set;}
public int ProductId{get;set;}
公共产品实体产品{get;set;}
}
公共类存储模型
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表产品{get;set;}=new List();
}
公共类产品模型
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表存储{get;set;}=new List();
}
公共类CustomProfile:Profile
{
公共自定义配置文件()
{
CreateMap()
.FormMember(d=>d.产品、,
opt=>opt.MapFrom(s=>s.Products))
.AfterMap((模型、实体)=>
{
foreach(entity.Products中的var entityProduct)
{
entityProduct.StoreId=entity.Id;
entityProduct.Store=实体;
}
});
CreateMap()
.ForMember(entity=>entity.StoreId,opt=>opt.MapFrom(model=>model.Id))
.ForMember(entity=>entity.Store,opt=>opt.MapFrom(model=>model))
.ForMember(entity=>entity.ProductId,opt=>opt.Ignore())
.ForMember(entity=>entity.Product,opt=>opt.Ignore());
CreateMap()
.FormMember(d=>d.商店,
opt=>opt.MapFrom(s=>s.Stores))
.AfterMap((模型、实体)=>
{
foreach(entity.Stores中的var entityStore)
{
entityStore.ProductId=entity.Id;
entityStore.Product=实体;
}
});
CreateMap()
.ForMember(entity=>entity.StoreId,opt=>opt.Ignore())
.ForMember(entity=>entity.Store,opt=>opt.Ignore())
.ForMember(entity=>entity.ProductId,opt=>opt.MapFrom(model=>model.Id))
.ForMember(entity=>entity.Product,opt=>opt.MapFrom(model=>model));
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var配置=新的MapperConfiguration(cfg=>
{
AddProfile();
});
#如果调试
assertConfigurationsValid();
#恩迪夫
var mapper=configuration.CreateMapper();
var store0=新的StoreModel()
{
Id=1,
Name=“Store0”,
};
var store1=新的StoreModel()
{
Id=2,
Name=“Store1”,
};
var product=新产品模型()
{
Id=1,
Name=“产品”,
};
store1.Products.Add(产品);
product.Stores.Add(store1);
store0.Products.Add(产品);
product.Stores.Add(store0);
var store0Entity=mapper.Map(store0);
Debug.Assert(store0Entity.Products[0]。Product.Stores[0]。Store.Id==
store0Entity.Products[0]。Product.Stores[0]。Store.Products[0]。StoreId);
}
}
}
映射成功通过,但由于某种原因,某些深键未映射到相关的
StoreEntity

以下断言失败

Debug.Assert(store0Entity.Products[0]。Product.Stores[0]。Store.Id==
store0Entity.Products[0]。Product.Stores[0]。Store.Products[0]。StoreId);

似乎由于某种原因,深度存储类AutoMapper使用了错误的映射列表。。。但我不确定…

我已经找到了解决这个问题的方法(感谢您对问题的回答)

为了检测
循环引用
我可以添加
.preserverences()
映射方法

以下是正确的
自定义配置文件

公共类CustomProfile:Profile
{
公共自定义配置文件()
{
CreateMap()
.FormMember(d=>d.产品、,
opt=>opt.MapFrom(s=>s.Products))
.AfterMap((模型、实体)=>
{
foreach(entity.Products中的var entityProduct)
{
entityProduct.StoreId=entity.Id;
entityProduct.Store=实体;
}
})
.references();
CreateMap()
.ForMember(entity=>entity.StoreId,opt=>opt.MapFrom(model=>model.Id))
.ForMember(entity=>entity.Store,opt=>opt.MapFrom(model=>model))
.ForMember(entity=>entity.ProductId,opt=>opt.Ignore())
.ForMember(entity=>entity.Product,opt=>opt.Ignore());
CreateMap()
.FormMember(d=>d.商店,
opt=>opt.MapFrom(s=>s.Stores))
.AfterMap((模型、实体)=>
{
foreach(entity.Stores中的var entityStore)
{
实体商店