2
Addressesテーブルへの外部参照を持つCustomersテーブルがあります。 AutoMapperは、既存のレコードを更新するのではなく、自分のAddress参照が新しいレコードであるとEFに考えるようにしているようです。automapperが更新の代わりにEntity Frameworkを挿入するのはなぜですか?
このコードは、アドレスレコードを正しく更新します。これは、新しいものを追加していません:
using (CSIntUnitOfWork uow = new CSIntUnitOfWork())
{
CustomerRepository customerRepository = new CustomerRepository(uow, _resellerID);
DataModels.Customer updateCustomer = customerRepository.GetByID(customer.CustomerID);
updateCustomer.ResellerID = customer.ResellerID;
updateCustomer.CustomerType = customer.CustomerType;
updateCustomer.Password = customer.Password;
updateCustomer.Comments = customer.Comments;
updateCustomer.Address.ResellerID = customer.Address.ResellerID;
updateCustomer.Address.AddressCode = customer.Address.AddressCode;
updateCustomer.Address.AddressType = customer.Address.AddressType;
updateCustomer.Address.CompanyName = customer.Address.CompanyName;
updateCustomer.Address.LastName = customer.Address.LastName;
updateCustomer.Address.FirstName = customer.Address.FirstName;
uow.SaveChanges();
}
このコードでは、常に新しいアドレスレコードを追加します。
using (CSIntUnitOfWork uow = new CSIntUnitOfWork())
{
CustomerRepository customerRepository = new CustomerRepository(uow, _resellerID);
DataModels.Customer updateCustomer = customerRepository.GetByID(customer.CustomerID);
Mapper.CreateMap<Customer, Customer>()
.ForMember(dest => dest.CustomerID, opt => opt.Ignore());
Mapper.Map(customer, updateCustomer);
Mapper.CreateMap<Address, Address>()
.ForMember(dest => dest.ID, opt => opt.Ignore());
Mapper.Map(customer.Address, updateCustomer.Address);
uow.SaveChanges();
}
任意のアイデアをなぜこれが起こっていますか?
AutoMapperマップのネストされたプロパティ。あなたはアドレスを別々にマップする必要はないという意味です。 「顧客」をマッピングする前にマップを作成すれば、自動的にマップされます。 – Maxim
ネストマップを作成するにはどうすればよいですか? – Scottie
AutoMapperは、それをそのままの状態でサポートします。マッピング前のすべてのネストされた型の "CreateMap"だけです。 – Maxim