Я пытаюсь разработать свой первый проект ASP.net MVC с Entity Framework. Я не использовал никаких моделей просмотров, я использовал одни и те же модели для просмотра и транзакций базы данных. Вот что, у меня есть пользовательская таблица. В создании у меня есть 5 вещей в моей модели User
: UserName
, UserPassword
, FullName
, Branch
и BranchId
(Навигация к другой таблице). Но когда я хочу редактировать пользователя, мне не нужно поле UserPassword, потому что смена пароля будет невозможна. Поэтому я создал модель с моделью User
, за исключением поля UserPassword
с именем UserEdit
.Копирование модели представления в модель данных
В режиме просмотра я использую модель User, в режиме редактирования я использую модель UserEdit. В контроллере я использую autoapper и копирует значения от User
до UserEdit
и возвращает это для просмотра. Он работает нормально, проблема в обновлении.
Я пытаюсь обновить пользователя, как это:
public bool Update(UserEdit userEdit) {
User user = Find(userEdit.UserUsername);
Mapper.CreateMap<UserEdit, User>();
user = (User)Mapper.Map(userEdit, user, typeof(UserEdit), typeof(User));
if (_modelState.IsValid)
{
_transactionManager.GetContext().Entry(user).State = System.Data.Entity.EntityState.Modified;
_transactionManager.CommitTransaction();
return true;
}
else
{
return false;
}
}
Но это дает мне эту ошибку:
Additional information: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
Когда я проверить пользователь я пытаюсь обновить, я вижу Объекты Entity Framework, связанные с ним. Поэтому я думаю, что причиной этой ошибки является, вероятно, таблица ветвей и связанные объекты в объекте пользователя. Мне действительно не нужны эти объекты, связанные с объектами, в моем пользовательском объекте. Если бы я мог только копировать свойства в модели, было бы здорово. Может быть, я делаю что-то еще неправильно. Поскольку я знаю, что люди все время используют модели просмотра, должен быть простой способ сделать это.
Любые идеи?
Thanks
Невозможно помочь, не видя ваши модели (данные и просмотреть модель), но убедитесь, что все свойства обновляются. –
Я действительно сказал, как мои модели, есть только 5 полей на моей основной модели, модель просмотра такая же, только отсутствие пароля. – user3781428
Показать их, и представление (и было бы бессмысленно иметь 'Branch' и' BranchID' в модели представления) –