이미 추가 된 엔티티 개체를 편집하려고합니다.엔티티 개체를 데이터베이스에 저장할 수 없습니다.
, 다음은 내가 엔티티 Frameworks` 코드 먼저 사용 모델 (이제까지 당신이 선호 또는 모델 첫째,) : 뷰에서
public class ImageFile
{
public int Id { get; set; }
[DisplayName("Naam")]
public string FileName { get; set; }
public string ImageUrl { get; set; }
}
나는 이미지 URL을 숨기고 사용자가 업로드 할 수 있도록 파일, 제대로 작동합니다. 이미지 변경 작업이 끝나면 (Edit 메서드), 개체를 다시 데이터베이스에 저장하려고합니다.
다음 방법을 보여줍니다
public ActionResult Edit([Bind(Include = "Id,FileName,ImageUrl")] ImageFile imageFile, HttpPostedFileBase actualImage)
{
if(actualImage != null && actualImage.ContentLength > 0)
{
ImageFile originalImageFile = db.Images.Find(imageFile.Id);
if(originalImageFile.FileName != imageFile.FileName)
{
DeleteImage(originalImageFile.FileName);
}
string fullUrl = SaveImage(imageFile, actualImage);
// Set the new imageUrl.
imageFile.ImageUrl = fullUrl.Replace("~", "");
// Save changes to database
var entry = db.Entry(imageFile);
entry.Property(i => i.ImageUrl).IsModified = true;
entry.Property(i => i.FileName).IsModified = true;
db.SaveChanges();
return RedirectToAction("Index");
}
// Else that only changes the filename, instead of uploading a new file.
// Uses same saving logic.
}
당신은 내가 MVCs '비계 나를 위해 만든 원래의 편집 - SaveChanges를 변경 한 볼 수 있듯이. 그것은 다음과 같습니다 :
db.Entry(imageFile).State = EntityState.Modified;
db.SaveChanges();
두 가지 해결책이 작동하지 않았습니다.
추가 정보 : 회원 유형 'ImageFile'의 실체가 컨텍스트에 존재하지 않기 때문에 재산 '이미지 URL'을 위해 호출 할 수 없습니다 'IsModified'가 첫 번째 솔루션은
InvalidOperationException
가 발생합니다. 컨텍스트에 엔터티를 추가하려면 DbSet의 Add 또는 Attach 메서드를 호출합니다.
번째 해결책은도를 슬로우 InvalidOperationException
:
추가 정보 : 동일 유형의 다른 엔티티가 이미 있기 때문에 타입 'BonTemps.Areas.Admin.Models.ImageFile'의 실체를 부착하는 것은 실패 동일한 기본 키 값. 이것은 'Attach'방법을 사용하거나 그래프의 엔티티 중 하나가 충돌하는 키 값을 갖는 경우 엔티티의 상태를 '변경되지 않음'또는 '수정 됨'으로 설정할 때 발생할 수 있습니다. 이는 일부 엔티티가 새롭고 아직 데이터베이스 생성 키 값을 수신하지 않았기 때문일 수 있습니다. 이 경우 'Add'메소드 또는 'Added'엔티티 상태를 사용하여 그래프를 추적 한 다음 비 신규 엔티티의 상태를 'Unchanged'또는 'Modified'로 적절하게 설정하십시오.
나는 정말 여기에서 붙어있어서 변경 사항을 저장하기 위해 무엇을 할 수 있는지 잘 모른다. 왜 구원을 얻지 못할까요? ActionResult 메소드를 입력 한 후 수동으로 ImageUrl
을 설정하는 것과 관련이 있습니까?
대신 ViewModel을 만들고 수동으로 변경해야합니까? 거기에 어떤 ViewModel 만들기 피할 수있는 솔루션이 있나요?