Không chắc chắn nếu tiêu đề có ý nghĩa, nhưng đây là những gì tôi đang làm. Tôi đang sử dụng AutoMapper để ánh xạ Entity Framework Entities của tôi cho các đối tượng DTO của tôi và ngược lại. Sự cố xảy ra khi tôi cố gắng ánh xạ dữ liệu DTO tới thực thể EF. Không có thuộc tính để ánh xạ thuộc tính cho EntityKey. Để khắc phục điều này, tôi làm một số như sau:Có cách nào chung để sử dụng ValueResolver của AutoMapper để ánh xạ các giá trị EntityKey cho các thực thể EF?
Mapper.CreateMap<VideoDTO, Video>()
.ForMember(dest => dest.EntityKey, opt =>
opt.ResolveUsing<VideoEntityKeyResolver>());
Lớp VideoEntityKeyResolver trông giống như:
public class VideoEntityKeyResolver : ValueResolver<VideoDTO, EntityKey>
{
protected override EntityKey ResolveCore(VideoDTO source)
{
EntityKey key = new EntityKey("EntityFrameworkTestingEntities.Videos",
"VideoId", source.VideoId);
return key;
}
}
tôi đã tự hỏi nếu có một cách chung chung hơn để làm điều này mà tôi có thể có 1 lớp với một hàm tạo lấy Tên bộ thực thể, Tên thuộc tính khóa và Giá trị khóa trong một hàm tạo. Tôi đã nghĩ đến việc chỉ thêm một thuộc tính EntityKey vào các đối tượng DTO của tôi, âm thanh rất giống như băng qua các luồng khi toàn bộ điểm tạo đối tượng DTO là làm thắt chặt lớp dữ liệu của tôi trong phần còn lại của ứng dụng của tôi .
Trên ghi chú hoàn toàn không liên quan (tôi có thể tạo câu hỏi mới nếu cần), nơi tôi cần xác định ánh xạ chính xác khi sử dụng AutoMapper? Hiện tại tôi đang thực hiện nó trong constructor của đối tượng context (đối tượng kho lưu trữ EF của tôi), nhưng tôi tin nó khá tốn kém và không chính xác, nó hoạt động.
Cảm ơn phản hồi chi tiết. Hầu hết nó là trên đầu của tôi, nhưng đó là nhiều hơn tôi hơn bạn. Tôi vẫn vật lộn với việc sử dụng lambda và như vậy. Nhưng dù sao, bạn có biết liệu có phương pháp tự động hóa cho phép bạn chỉ định rõ ràng giá trị được tính cho một thuộc tính không? Nếu đó là trường hợp, tôi chỉ có thể tạo một đối tượng EntityKey với các tham số cần thiết và ánh xạ giá trị đó cho thuộc tính EntityKey trên thực thể của tôi. Tôi đã nhìn vào phương pháp MapFrom AutoMapper, nhưng chưa có thời gian để nghiên cứu nó. – jason
Tôi sẽ đề xuất rằng đó là một phương pháp đơn giản hơn, nhưng đã quyết định trả lời trực tiếp câu hỏi của bạn. Tôi sẽ thêm nó vào câu trả lời. (Ngoài ra, đừng quên bỏ phiếu và/hoặc chấp nhận câu trả lời nếu bạn tìm thấy nó để đáp ứng nhu cầu của bạn) – mkedobbs
Cảm ơn bạn đã đi xa hơn và xa hơn về câu hỏi này. Điều này thực sự đã giúp tôi! Tôi đã đi trước và giải quyết trên bản đồ chỉ đến một tài sản EntityKey và dường như đã làm việc. – jason