Список картографических моделей AutoMapper - PullRequest
0 голосов
/ 02 апреля 2012

Я пытаюсь использовать AutoMapper в первый раз, и у меня есть некоторые проблемы с ним. Мой код ниже, и я получаю ошибку ниже. Может быть, кто-то может показать, как отобразить список моделей?

cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'Entity.Product'   C:\Users\Administrator\Projects\PC\trunk\PC\Controllers\AdminController.cs  37  100 PC
public class ProductViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int UsersCount { get; set; }
}

var products = _repository.GetProducts(true).Select(p=> new 
{
    p.Id,
    p.Name,
    UsersCount = 0
});

Mapper.CreateMap<Product, ProductViewModel>();
ViewData["Products"] = Mapper.Map<IEnumerable<Product>, IEnumerable<ProductViewModel>>(products); //Error appears on products object


//Product domain model(linq2sql generated model)
public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged
{
    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);
    private int _Id;
    private bool _Active;
    private System.Nullable<int> _Sort;
    private System.Nullable<int> _Category;
    private string _Name;
    private int _ProductTypeId;
    private decimal _Price;
    private System.Nullable<int> _Months;
    private System.Nullable<int> _Credits;
    private string _Features;
    private string _BlockReason;
    private string _BuyUrl1;
    private string _BuyUrl2;
    private bool _UsersManager;
}

1 Ответ

3 голосов
/ 02 апреля 2012

В вашем запросе LINQ вы выбираете анонимный объект.Убедитесь, что вы выбрали Product, который является вашим типом источника (или, более конкретно, IEnumerable<Product>):

IEnumerable<Product> products = _repository.GetProducts(true);
IEnumerable<ProductViewModel> productsViewModel = Mapper.Map<IEnumerable<Product>, IEnumerable<ProductViewModel>>(products);
return View(productsViewModel);

Также не вызывайте Mapper.CreateMap<TSource, TDest> внутри действия вашего контроллера.Это должно быть вызвано только один раз за время существования AppDomain, в идеале в вашем Application_Start.

Также обратите внимание, что я избавился от ViewData, и это здорово.Вам не нужны ViewData.Вы работаете с моделями представления.Это то, что они должны делать.Содержите информацию, которая понадобится вашему представлению в строго типизированном виде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...