当我包含另一个类时,缺少类型映射配置或不受支持的映射

每当我将 Dish 类包含到餐厅类中时,都会发生 Missing type map configuration or unsupported mapping 异常。然而,当我不包括菜类时,一切正常。如何在不发生此错误的情况下包含菜类?

实体模型:

    public class Restaurant : IEqualityComparer<Restaurant>
    {
        public Restaurant()
        {

        }
        public int Id { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
        public bool HasDelivery { get; set; }
        public int AdressId { get; set; }

       
        public virtual Adress Adress{ get; set; }
        public  List<Dish> Dishes { get; set; }

        public bool Equals(Restaurant x,Restaurant y)
        {
            if (x.Name == y.Name)  return true;
            else return false;
        }
      
                

    public int GetHashCode([DisallowNull] Restaurant obj)
        {
            return 1;
        }
    }

视图模型:

    public class RestaurantDataModel : IEqualityComparer<Entitties.Restaurant>
    {
        public RestaurantDataModel()
        {

        }
        
        public int Id { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
        public bool HasDelivery { get; set; }
        public string City { get; set; }
        public string Street { get; set; }
        public int HomeNumber { get; set; }




        public List<DishDataModel> Dishes { get; set; }

        public bool Equals(Entitties.Restaurant x,Entitties.Restaurant y)
        {
            if (x.Name == y.Name) return true;
            else return false;
        }

        public int GetHashCode([DisallowNull] Restaurant obj)
        {
            throw new NotImplementedException();
        }
    }

创建地图:

    public  class RestaurantMapper 
    {
        IMapper mapper;
        public RestaurantMapper()
        {
          mapper = new MapperConfiguration(config => config.CreateMap<Entitties.Restaurant,DataModels.RestaurantDataModel>()
                 .ForMember(x=>x.City,c=>c.MapFrom(s=>s.Adress.City))
                 .ForMember(x => x.HomeNumber,c => c.MapFrom(s => s.Adress.HomeNumber))
                 .ForMember(x => x.Street,c => c.MapFrom(s => s.Adress.Street))
                 .ForMember(x => x.Dishes,c => c.MapFrom(s => s.Dishes)))
                .CreateMapper();


            mapper = new MapperConfiguration(config => config.CreateMap<Entitties.Dish,DataModels.DishDataModel>()).CreateMapper();
            ;
        }
        public DataModels.RestaurantDataModel Map(Entitties.Restaurant restaurant)
        {
            
                return mapper.Map<DataModels.RestaurantDataModel>(restaurant);
            
          
          

        }
        public Entitties.Restaurant Map(DataModels.RestaurantDataModel restaurantDataModel)
        {
            return mapper.Map<Entitties.Restaurant>(restaurantDataModel);

        }
    }
MAP :

      [HttpGet]
        public actionResult<IEnumerable<RestarantApplicationDataBase.Entitties.Restaurant>> getallRestaurants()
        {
            
            RestaurantRepository.SaveChanges();
          
            var result = RestaurantRepository.GetallRestaurants().FirstOrDefault();
            var g = mRestaurantMapper.Map(result);
           
            
            
            return Ok(g);
        }

我将菜肴加入餐厅的方法:

     public IEnumerable<Entitties.Restaurant> GetallRestaurants()
        {
            var allRestaurants = new List<Restaurant>();
            var restaurant = dbContext.Restaurants.Include(c=>c.Adress).Include(c=>c.Dishes).ToList();



            foreach (var item in restaurant)
            {
                
                allRestaurants.Add(item);
                
                     


            }
            return allRestaurants;


        }
harry898 回答:当我包含另一个类时,缺少类型映射配置或不受支持的映射

您正在覆盖 mapper 的第二个分配中的配置。您需要两种配置。

var configuration = new MapperConfiguration(cfg => {
    cfg.CreateMap<Foo,Bar>();
    cfg.CreateMap<AnotherFoo,AnotherBar>();
});

在你的例子中,

var config = new MapperConfiguration(config => 
{
config.CreateMap<Entitties.Restaurant,DataModels.RestaurantDataModel>()
             .ForMember(x=>x.City,c=>c.MapFrom(s=>s.Adress.City))
             .ForMember(x => x.HomeNumber,c => c.MapFrom(s => s.Adress.HomeNumber))
             .ForMember(x => x.Street,c => c.MapFrom(s => s.Adress.Street))
             .ForMember(x => x.Dishes,c => c.MapFrom(s => s.Dishes));

config.CreateMap<Entitties.Dish,DataModels.DishDataModel>();
});

var mapper = config.CreateMapper();


本文链接:https://www.f2er.com/1450.html

大家都在问