2012-03-22 42 views
5
public abstract class Entity : IEntity 
{ 
    [Key] 
    public virtual int Id { get; set; } 
} 

public class City:Entity 
{ 
    public string Code { get; set; } 
} 

public class BaseViewModel:IBaseViewModel 
{ 
    public int Id { get; set; } 
} 

public class CityModel:BaseViewModel 
{ 
    public string Code { get; set; } 
} 

miền và quan điểm của tôi lớp ...phương pháp khuyến nông Generic cho automapper

gia hạn bản đồ

public static TModel ToModel<TModel,TEntity>(this TEntity entity) 
    where TModel:IBaseViewModel where TEntity:IEntity 
{ 
    return Mapper.Map<TEntity, TModel>(entity); 
} 

và tôi đang sử dụng như dưới đây

City city = GetCity(Id); 
CityModel model = f.ToModel<CityModel, City>(); 

nhưng dài

tôi có thể viết nó như dưới đây không?

City city = GetCity(Id); 
CityModel model = f.ToModel(); 

là có thể?

Trả lời

4

Không bởi vì đối số chung thứ nhất không thể được suy luận ngầm.

tôi sẽ làm điều này

public static TModel ToModel<TModel>(this IEntity entity) where TModel:IBaseViewModel 
    { 
     return (TModel)Mapper.Map(entity, entity.GetType(), typeof(TModel)); 
    } 

Sau đó, các mã vẫn còn thiếu hơn đó là:

var city = GetCity(Id); 
var model = city.ToModel<CityModel>(); 
+0

nhờ Daniel, tốt của nó đối với tôi :) – tobias

+0

@tobias - tôi quên các diễn viên. –

0

Đặt phương pháp khuyến nông trên IEntity như một phương pháp thành viên. Sau đó, bạn phải vượt qua chỉ có một loại.

14

Thay vì nhảy qua tất cả những hoops, tại sao không chỉ cần sử dụng:

public static TDestination ToModel<TDestination>(this object source) 
{ 
    return Mapper.Map<TDestination>(source); 
} 
+2

Đối với bất cứ ai tự hỏi, tôi chỉ cần làm một thử nghiệm nhanh chóng với ánh xạ một đồ thị đối tượng với một số thực thể lồng nhau 1.000.000 lần trong một vòng lặp trong LINQPad. Không có sự khác biệt hiệu suất rõ rệt nào. – kwcto

+1

Tôi đã sử dụng phương pháp này trong một thời gian, và nó hoạt động rất tốt. Nhưng API tĩnh hiện đã lỗi thời trong AutoMapper. – Andreas

Các vấn đề liên quan