Я пытаюсь использовать Automapper с кодом Entity Framework First 4.1. Я не могу получить сохранение / обновление, чтобы работать правильно 100% времени.
Первая проблема - если я не использую UseDestinationValue()
для объекта, тогда мой DTO не будет сопоставлять его свойства с сущностью. Затем, если я не использую UseDestinationValue()
, динамически созданный прокси-объект теряет некоторые свойства, а свойство Address получает новую сущность при каждом обновлении.
Mapper.CreateMap<GymModel, Gym>(); <-- loses Entity Framework proxy properties for update, works fine on insert
или
Mapper.CreateMap<GymModel, Gym>()
.ForAllMembers(q => q.UseDestinationValue()); <-- Doesn't map DTO to Entity
и / или это тоже не работает
var gym = Mapper.CreateMap<GymModel, Gym>();
gym.ForAllMembers(q => q.UseDestinationValue());
gym.ForMember(q => q.DateCreated, o => o.MapFrom(s => s.DateCreated));
Услуги
public void Save(GymModel model)
{
var item = new Gym()
{
Address = new Address()
};
if (model.Id > 0)
{
Expression<Func<Gym, bool>> where = q => q.Id == model.Id;
Expression<Func<Gym, object>> address = q => q.Address;
item = _gymsRepository.Get(new [] { address }, where);
}
model.Address.Id = item.AddressId;
Mapper.Map(model, item);
AddressModel
public class AddressModel : IAddressModel
{
public int Id { get; set; }
public string Location { get; set; }
public string StreetAddress { get; set; }
public string ExtendedAddress { get; set; }
public string City { get; set; }
public string StateRegion { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public double? Latitude { get; set; }
public double? Longitude { get; set; }
}
Адрес
[Table("Address", Schema = "GrassrootsHoops")]
public class Address
{
[Key]
public int Id { get; set; }
public string Location { get; set; }
public string StreetAddress { get; set; }
public string ExtendedAddress { get; set; }
public string City { get; set; }
public string StateRegion { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public double? Latitude { get; set; }
public double? Longitude { get; set; }
}