У меня проблемы с выполнением обновления в Entity Framework.Я не совсем понимаю поведение, которое вижу.
Я использую базу данных AdventureWorks.
Начальное значение для StateProvince
равно Micronesia
.Если я изменю его на Maryland
, обновление пройдет успешно.Однако, если я затем пытаюсь изменить его обратно на Micronesia
, я получаю следующую ошибку:
"Невозможно вставить строку с повторяющимся ключом в объект 'Sales.SalesTerritory' с уникальным индексом 'AK_SalesTerritory_Name'.\ r \ nОпределение было прекращено. "
Рассматриваемый метод DAL:
public static void UpdateCustomer(CustomerDetails customerDetails)
{
AWEntities context = Common.GetContext();
var customerQuery = from c in context.Individuals
.Include("Contact")
.Include("Customer.CustomerAddresses.Address.StateProvince.SalesTerritory")
//.Include("Customer.SalesTerritory.StateProvinces")
.Where(id => id.CustomerID == customerDetails.CustomerId)
select c;
var individual = customerQuery.ToList().ElementAt(0);
Contact contact = individual.Contact;
contact.LastName = customerDetails.LastName;
contact.MiddleName = customerDetails.MiddleName;
contact.FirstName = customerDetails.FirstName;
contact.EmailAddress = customerDetails.EmailAddress;
contact.Phone = customerDetails.Phone;
contact.Title = customerDetails.Title;
AWModel.Customer customer = individual.Customer;
customer.CustomerID = customerDetails.CustomerId;
customer.SalesTerritory.Name = customerDetails.SalesTerritory;
Address address = individual.Customer.CustomerAddresses.ElementAt(0).Address;
address.AddressLine1 = customerDetails.AddressLine1;
address.AddressLine2 = customerDetails.AddressLine2;
address.City = customerDetails.City;
address.PostalCode = customerDetails.PostalCode;
address.StateProvinceID = customerDetails.SalesProvinceId;
context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
}
Может ли кто-нибудь определить правильный способ сделать то, что я пытаюсь сделать.