每当我将 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;
}
答案 0 :(得分:0)
您正在覆盖 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();