, поэтому я нашел несколько вопросов по SO (например: Список отображения Automapper становится равным 0 ) по поводу того, что autopper возвращает список 0 из отображения, но ни один из них не выглядит так, как я смотрю.
У меня есть два типа:
public class DNSContract : BaseContract
{
public int DoNotSolicitID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string Zip4 { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string BusinessName { get; set; }
public string Partner { get; set; }
public string Origination { get; set; }
}
и
public DNS_Entity()
{
// set default values which can be expicity set if needed
InsertDT = DateTime.Now;
InsertDT = DateTime.Now;
// InsertUserID = 999;
Origination = "RDI";
}
public long DoNotSolicitID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string Zip4 { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string BusinessName { get; set; }
public string Partner { get; set; }
public string Origination { get; set; }
public Nullable<System.DateTime> InsertDT { get; set; }
//public int InsertUserID { get; set; }
public DateTime? UpdateDT { get; set; }
//public int UpdateUserID { get; set; }
}
там довольно легко.Вот метод «быстрой карты», который я использую:
public static TToType QuickMap<TFromType, TToType>(this TFromType fromObject, TToType toObject)
where TFromType : class
where TToType : class, new()
{
// Look for an existing map, and if none is found add one.
if (Mapper.FindTypeMapFor(typeof (TFromType), typeof (TToType)) == null)
{
Mapper.CreateMap(typeof (TFromType), typeof (TToType));
}
// Execute the auto map
TToType map = Mapper.Map(fromObject, toObject);
return map;
}
пока все хорошо, я думаю.Однако
TToType map = Mapper.Map(fromObject, toObject);
ничего не делает.Проблема в том, что этот код возвращает пустой DNSContract, когда он должен вернуть 4 (из моего модульного теста):
using (var scope = dnsWork)
{
scope.Register(this);
var one = WhereInternal(whereClause);
var two = one.ToList();
var three = two.QuickMap(new List<DNSContract>());
return three;
//return WhereInternal(whereClause).ToList().QuickMap(new List<DNSContract>());
}
Я разбил вызов на один, два, три для здравомыслия во время отладки этого,В общем, у меня есть список, и я хочу вернуть список, и это не удается.
Что-то работает:
return Mapper.Map(two, new List<DNSContract>());
, но я хотел бы использовать универсальный метод, а неотображение разбросано по слоям обслуживания.
С помощью autompper нужно ли делать что-то особенное для отображения списков?Я думаю, что это проблема с отображением типов, но по какой-то причине список для typeB просто не работает правильно.
Спасибо.Это раздражало меня уже пару недель, и я как бы игнорировал это, но мне нужно исправить это как можно скорее.
UPDATE # 1 : согласно запросу ниже приведен метод WhereInternal вфрагмент этого класса, который находится в моем DAL и взят из Entity Framework:
public abstract class EFRepository<T> : IRepository<T> where T : BaseEntity
{
public IUnitOfWork UnitOfWork { get; set; }
private IDbSet<T> _objectset;
private IDbSet<T> ObjectSet
{
get { return _objectset ?? (_objectset = UnitOfWork.Context.Set<T>()); }
}
public IQueryable<T> WhereInternal(Expression<Func<T, bool>> expression)
{
return ObjectSet.Where(expression);
}
}
Я не думаю, что это действительно важно в контексте, так как я преобразую в список, а затем пытаюсь отобразить.