Свойство EntityKey можно установить, только если текущее значение свойства равно нулю - PullRequest
6 голосов
/ 15 декабря 2011

Я пытаюсь выполнить обновление EF следующим образом, но продолжаю получать эту ошибку:

Свойство EntityKey можно установить только в том случае, если текущее значение свойства равно нулю.

        using (hydraEntities db = new hydraEntities())
        {
            YouUser = db.youusers.Include("address").Include("entity").Include("youusercontacts.contact").Include("youuserlogins").Include("youusernotes.note").Include("youusernotes.youuser.entity").Where( yu => yu.YOUUserId.Equals(YOUUserId)).First();
        }

            YouUser.entity.FirstName = txtFirstName.Text;
            YouUser.entity.LastName = txtLastName.Text;
            YouUser.address.AddressLine1 = txtAddressLine1.Text;
            YouUser.address.AddressLine2 = txtAddressLine2.Text;
            YouUser.address.City = txtCity.Text;
            YouUser.address.State = ddlState.SelectedValue;
            YouUser.address.Zipcode = txtZipcode.Text;

            using (hydraEntities db = new hydraEntities())
            {
                db.youusers.AddObject(YouUser);
                db.ObjectStateManager.ChangeObjectState(YouUser, System.Data.EntityState.Modified);
                db.SaveChanges();
            }

Буду очень признателен за понимание того, как я могу это исправить и выполнить приведенное выше утверждение.

Ответы [ 2 ]

11 голосов
/ 15 декабря 2011

Не используйте AddObject в этом сценарии.Это для вставки новой сущности, но вы обновляете существующую.Используйте Attach вместо:

using (hydraEntities db = new hydraEntities())
{
    db.youusers.Attach(YouUser);
    db.ObjectStateManager.ChangeObjectState(YouUser, System.Data.EntityState.Modified);
    db.SaveChanges();
}
0 голосов
/ 17 июня 2012

В моем сценарии я несколько раз добавлял объекты через разные потоки. При этом мне пришлось заблокировать объект Model Container, чтобы убедиться, что одновременно обрабатывается только один объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...