Khi nào bạn gặp lỗi? Có phải khi bạn gọi AssertConfigurationIsValid
?
Nếu có, thì chỉ đơn giản là không gọi phương pháp này
Bạn không cần phải gọi phương pháp này, hãy xem xét các bản đồ sau đó hoạt động:
public class Foo1
{
public string Field1 { get; set; }
}
public class Foo2
{
public string Field1 { get; set; }
public string Field2 { get; set; }
}
Mapper.CreateMap<Foo1, Foo2>();
var foo1 = new Foo1() {Field1 = "field1"};
var foo2 = new Foo2();
Mapper.Map(foo1, foo2);//maps correctly, no Exception
Bạn có thể muốn gọi AssertConfigurationIsValid
cho khác ánh xạ để đảm bảo chúng chính xác, vì vậy thay vào đó, những gì bạn cần làm là sắp xếp ánh xạ của bạn thành Cấu hình:
public class MyMappedClassesProfile: Profile
{
protected override void Configure()
{
CreateMap<Foo1, Foo2>();
//nb, make sure you call this.CreateMap and NOT Mapper.CreateMap
//I made this mistake when migrating 'static' mappings to a Profile.
}
}
Mapper.AddProfile<MyMappedClassesProfile>();
và sau đó nếu bạn quyết định bạn muốn kiểm tra tính hợp lệ của các bản đồ (theo từng trường hợp trong tình huống của bạn) sau đó gọi
Mapper.AssertConfigurationIsValid(typeof(MyMappedClassesProfile).FullName);
quan trọng trong trường hợp của bạn và/hoặc trường hợp bất kỳ nơi bạn dont gọi AssertConfigurationIsValid
bạn nên sử dụng một cái gì đó như AutoFixture và Kiểm tra đơn vị để đảm bảo ánh xạ của bạn đang hoạt động. (đó là ý định của AssertConfigurationIsValid
)
Đó là khi tôi gọi AssertConfigurationIsValid, nhưng tôi đã sẵn sàng giữ nó trong thử nghiệm đơn vị của mình. Ngay bây giờ nó là trong Global.asax nhưng cuối cùng sẽ di chuyển trong thử nghiệm đơn vị (Đó là một ứng dụng ASP.NET MVC). Vì vậy, về cơ bản bạn đang nói với tôi rằng tôi nên tránh sử dụng AssertConfigurationIsValid và viết thử nghiệm đơn vị của riêng tôi cho DAL của tôi? – Pluc
Tôi không bảo bạn làm điều đó trong * mọi trường hợp ... ở những nơi mà ánh xạ đơn giản sau đó tiếp tục sử dụng AssertConfigurationIsValid. Ở những nơi mà nó trở thành vấn đề bởi vì bạn biết tốt hơn không sử dụng nó. Tuy nhiên, bạn nên tổ chức ánh xạ của mình thành Cấu hình (các lớp mở rộng 'AutoMapper.Profile') vì loại sắp xếp này làm giảm tính chất tĩnh của cấu hình ánh xạ và lời gọi đến' AssertConfigurationIsValid ', sau đó sẽ áp dụng cho mọi khai báo Mapper.Map bạn ' đã thực hiện. – wal
Mọi thực thể sẽ có các thuộc tính bị thiếu vì tôi đang ánh xạ EF POCO tới DTO. Các DTO sẽ không bao giờ chứa các DTO khác mà giữ các ID (quan hệ một-một/nhiều) hoặc gọi kho lưu trữ thích hợp chịu trách nhiệm về thực thể được trả lời lại (với ID của nó làm tham số).Một số chỉ là một tài sản bị thiếu, nhưng tất cả chúng đều có ít nhất một. Tôi không chắc chắn nếu sử dụng Profiles sẽ mang lại cho tôi nhiều như ánh xạ chỉ được cấu hình một lần (vì nó là một ứng dụng web) khi máy chủ web bắt đầu. Tôi cũng chỉ sử dụng AutoMapper cho Model => DTO. Trừ khi tôi bắt đầu sử dụng nó cho ViewModels, tôi không thấy cần thiết. – Pluc