Вот мой код для действия HTTPPost Edit:
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public ActionResult Edit(int? id, HttpPostedFileBase upload)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var PeopleUpdateToDate = db.People.Find(id);
if (TryUpdateModel(PeopleUpdateToDate, "", new string[] { "LastName", "FirstMidName", "Age", "Address", "Interests", "FilePath" }))
{
if (upload != null && upload.ContentLength > 0)
{
if (PeopleUpdateToDate.FilePaths.Any(f => f.FileType == FileType.Avatar))
{
db.FilePaths.Remove(PeopleUpdateToDate.FilePaths.First(f => f.FileType == FileType.Avatar));
}
var avatar = new FilePath
{
FileName = System.IO.Path.GetFileName(upload.FileName),
FileType = FileType.Avatar
};
PeopleUpdateToDate.FilePaths = new List<FilePath> { avatar };
}
db.Entry(PeopleUpdateToDate).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(PeopleUpdateToDate);
}
И я получил InvalidOperationException как
Операция завершилась неудачно: связь не может быть изменена, так как одно или несколько свойств внешнего ключа не могут принимать значения NULL. Когда в отношения вносятся изменения, для связанного свойства внешнего ключа устанавливается нулевое значение. Если внешний ключ не поддерживает нулевые значения, необходимо определить новую связь, свойству внешнего ключа должно быть присвоено другое значение, отличное от нулевого, или должен быть удален несвязанный объект.
Я немного поискал, похоже, я должен изменить
db.FilePaths.Remove(PeopleUpdateToDate.FilePaths.First(f => f.FileType == FileType.Avatar));
to
db.FilePaths.DeleteObject(PeopleUpdateToDate.FilePaths.First(f => f.FileType == FileType.Avatar));
Однако DelectObject для меня не вариант. Пожалуйста, помогите, спасибо.
avatar
(в отличие от простого обновления свойстваFileName
существующего)? - person   schedule 13.09.2015