Я перерабатываю некоторый код с помощью automapper, см. Ниже со старым кодом, закомментированным.EF, исключение Automapper, «привязка объекта типа ... не удалось, потому что другой объект того же типа уже имеет одно и то же значение первичного ключа»
var propertyInUse = context.Properties.FirstOrDefault(j => j.ID != src.PropertyId && j.UPRN.ToLower() == src.UPRN.ToLower() && j.ContractId == src.ContractId);
if (propertyInUse == null)
{
var property = context.Properties.FirstOrDefault(j => j.ID == src.PropertyId);
if (property != null)
{
if (src.PropertyTypeId == 0)
{
src.PropertyTypeId = null;
}
src.Created = property.Created;
src.CreatedBy = property.CreatedBy;
src.ContractId = property.ContractId;
Mapper.CreateMap<Job, Property>();
property = Mapper.Map<Property>(src);
//property.PropertyNo = src.PropertyNo;
//property.BlockName = src.BlockName;
//property.StreetName = src.StreetName;
//property.AddressLine2 = src.AddressLine2;
//property.AddressLine3 = src.AddressLine3;
//property.AddressLine4 = src.AddressLine4;
//property.Postcode = src.Postcode;
//property.Latitude = src.Latitude;
//property.Longitude = src.Longitude;
//property.BlockUPRN = src.BlockUPRN;
//property.Comments = src.Comments;
//property.NumberOfBathrooms = src.NumberOfBathrooms;
//property.NumberOfBedrooms = src.NumberOfBedrooms;
//property.NumberOfKitchens = src.NumberOfKitchens;
//property.LastModifiedby = src.LastModifiedby;
property.LastModified = DateTime.Now;
context.Entry(property).State = EntityState.Modified;
success = true;
context.SaveChanges();
EDIT: Обратите внимание, что свойство объекта устанавливается от основания так, что предлагаемый дубликатом вопрос не относится.
Когда состояние установлено для изменения, я получаю следующее исключение;
Прикрепление объекта типа «M.Survey.ServiceLayer.Model.Property» не удалось, поскольку другой объект того же типа уже имеет одно и то же значение первичного ключа. Это может произойти при использовании метода «Прикрепить» или установки состояния объекта в «Без изменений» или «Модифицировано», если любые объекты на графике имеют конфликтующие значения ключей. Это может быть связано с тем, что некоторые объекты являются новыми и еще не получили значения ключей базы данных. В этом случае используйте метод «Добавить» или «Добавленное» состояние объекта для отслеживания графика, а затем, если необходимо, установите состояние не новых объектов «Без изменений» или «Модифицировано».
Что вызывает это и как его исправить?
Вам не нужно устанавливать состояние вообще. Трекер изменений будет делать это. –
Пожалуйста, посмотрите мой ответ на [ASP.NET MVC - Прикрепление объекта типа «MODELNAME» не удалось, поскольку другой объект того же типа уже имеет такое же значение первичного ключа] (http://stackoverflow.com/questions/ 23201907/жерех-сетчатой MVC-прикрепление-ан-объект-в-типа-ModelName-не удалось, потому-другой-лор/39557606 # 39557606). –