因此我發現了一些關於automapper從映射返回0列表的問題(例如:Automapper mapping list becomes 0),但沒有一個看起來與我正在看到的完全相同。Automapper從列表映射返回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>());
,但我想使用泛型方法,而不必在整個業務層映射灑。
有了automapper,我需要做任何特殊的列表映射嗎?我認爲這是我的映射類型的問題,但由於某種原因,typeB的列表工作不正常。
謝謝。這讓我煩惱了幾個星期,有點忽略它,但我需要解決的是儘快。
更新#1:按照要求,下面是同類產品的一個片段是在我的DAL和實體框架拉WhereInternal方法:
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);
}
}
我不認爲這是非常重要的在上下文中,因爲我轉換爲列表然後嘗試映射。
請提交什麼WhereInternal(whereClause)回報 - 我懷疑的IEnumerable? –
2011-12-14 16:15:44