2012-06-18 5 views
2

я снова столкнулся с проблемами с Entity Framework .... фуобновление внешнего ключа с помощью Entity Framework

Я пытаюсь обновить таблицу с внешним ключом,

У меня были проблемы с Вставка но отсортированы, отредактировав файл edmx.

Я использую следующий код для обновления таблицы пользователя, который имеет внешнее отношение к роли столу,

Domain.Data.Role role = db.Role.FirstOrDefault(r => r.RoleName == user.Role); 

Domain.Data.User data = db.User.Where(u => u.UserName == username).First(); 

data.Pass = user.Password.Encrypt(); 
data.CreatedBy = Login.User.Encrypt(); 
data.DtCreated = DateTime.Now; 

//data.Role = role; 

data.Role = (from r in db.Role 
       where r.RoleName == user.Role 
       select r).First(); 

db.SaveChanges(); 

На обновлении я получаю следующее исключение,

реляционного нарушения ограничения целостности произошло : Свойство, которое является частью ограничения ссылочной целостности, не может быть изменено, если объект имеет не временный ключ.

Любая обратная связь будет очень полезна.

С уважением,

Sab

ответ

0

Я не уверен, но вы можете проверить, есть ли у вас галочка «Включить столбцы внешнего ключа в модели» при создании/обновлении модели в конструкторе , Если у вас есть это галочка, вы можете обнаружить, что для установки объекта недостаточно, вам может потребоваться установить идентификатор или установить только идентификатор.

например. вам может потребоваться:

data.RoleId = role.RoleId; 

В сочетании с установкой объекта или вместо установки объекта.

Лично я не отмечаю «Включить столбцы внешнего ключа в модель», поскольку это вызвало у меня всевозможные головные боли, которые я не помню точно так же, как год или более назад. Иногда бывает больно, так как приятно иметь возможность фильтровать/искать/обновлять с помощью идентификаторов, но я научился жить без этого, чтобы избежать неприятностей, таких как вы испытываете.

Смежные вопросы