Trong AutoMapper 2.0, tôi đã sử dụng Cấu hình để định cấu hình ánh xạ của mình. Tôi sử dụng SourceMemberNameTransformer
và DestinationMemberNameTransformer
để khớp với tên thuộc tính nguồn và đích của tôi.Thành viên bị thiếu trong AutoMapper 2.1.265
Trong 2.1.265 các thuộc tính này không còn trên Hồ sơ. Có ai biết tại sao họ bị loại bỏ không? Nhưng quan trọng hơn, làm thế nào tôi có thể nhân đôi chức năng này.
Sửa
Tôi đã nhìn vào SourceMemberNamingConvention
và DestinationMemberNamingConvention
, nhưng tôi không thể tìm thấy bất kỳ tài liệu như thế nào những người làm việc. Có ai có kinh nghiệm sử dụng tùy chỉnh INamingConvention
không?
Chỉnh sửa 2
thành viên nguồn được tạo ra từ một cơ sở dữ liệu bên thứ 3. Thông thường, họ sử dụng tất cả các tên cột chữ thường với dấu gạch dưới giữa các từ. Đôi khi họ bỏ qua dấu gạch dưới, đôi khi họ ném vào viết hoa ngẫu nhiên.
Thành viên đích cố gắng tuân theo quy ước đặt tên .NET càng nhiều càng tốt. Dấu gạch dưới đã bị xóa, ký tự đầu tiên sau dấu gạch dưới được viết hoa. Các thay đổi bổ sung đã được thực hiện để làm cho tên thành viên dễ đọc hơn.
Để giải quyết việc này, tôi đặt
SourceMemberNameTransformer = name => name.Replace("_", "").ToUpper()
DestinationMemberNameTransformer = name => name.ToUpper()
Sửa 3
biết thêm thông tin cho những người đến từ tương lai.
Tôi đã kiểm tra nguồn để xem cách INamingConvention
được sử dụng. Cách nó được thiết kế nó một chút gây hiểu lầm. Giao diện được befined như
public interface INamingConvention
{
Regex SplittingExpression { get; }
string SeparatorCharacter { get; }
}
Tuy nhiên, AutoMapper không sử dụng định nghĩa đầy đủ của giao diện cho cả SourceMemberNamingConvention
và DestinationMemberNamingConvention
Phải mất mỗi thành viên của loại đích và áp dụng DestinationMemberNamingConvention.SplittingExpression
. Sau đó, lấy các phần khớp đó và gọi string.Join
bằng cách sử dụng SourceMemberNamingConvention.SeparatorCharacter
. Sau đó, nó cố gắng khớp các thành viên loại nguồn với các thành viên kiểu đích.
Đây là tổng quan cấp cao về những gì đang diễn ra và không cố gắng mô tả đầy đủ chức năng. Nó chỉ có nghĩa là để hiển thị như thế nào INamingConvention
được sử dụng và để hiển thị rằng SourceMemberNamingConvention.SplittingExpression
và DestinationMemberNamingConvention.SeparatorCharacter
không bao giờ được sử dụng.
Nếu bạn không thể chuyển đổi thành viên đích bằng chiến lược này, thì bạn phải ánh xạ theo cách thủ công các thuộc tính như nemesv's answer đề xuất.
Vâng, tôi đã xem xét điều đó. Điều này không giúp tôi vì tôi không làm bất cứ điều gì với tiền tố hoặc postfix. – cadrell0
Bạn có thể cung cấp một ví dụ cho thấy bạn đang cố đạt được điều gì không? – nemesv
Tôi đã cập nhật câu hỏi – cadrell0