2010-01-15 6 views
1

최근에 Steve Sanderson's Pro ASP.NET MVC Framework을 통해 작업하여 샘플 "SportsStore"응용 프로그램에 문제가 발생했습니다. SportsStore는 저장소에 제품을 삽입하고 업데이트하는 편집기를 제공하는 간단한 CRUD 앱입니다. 각 제품은 이미지를 가질 수 있습니다 (SQL Server 데이터베이스에 저장되어 있습니다. 가장 좋은 아이디어는 아니지만 다른 스레드에 대한 토론입니다).레코드를 업데이트 할 때 특정 필드를 무시하도록 DataContext에 지시하는 방법?

내가 알아챈 문제는 제품을 업데이트 할 때 제품에 이미지가 있으면 제품 이미지가 손실된다는 것입니다. 이것은 업데이트하는 코드가 현재 데이터베이스에있는 것과 비교하여 변경된 필드를 찾고 있기 때문에 발생합니다. DataContext가 제품 업데이트 양식의 파일 업로드 대화 상자가 비어 있음을 확인하면 ImageData 및 ImageMimeType 필드를 null로 설정합니다. 내가하고 싶은 건 당신이 업데이 트를하고있어 파일 업로드 대화 상자의 내용이 비어 있다면 DataContext가 ImageData 및 ImageMimeType 필드를 건드리지 않는다는 것입니다. 데이터베이스에 변경 사항을 쓰는 현재 코드는 다음과 같습니다.

public void SaveProduct(Product product) 
{ 
    EnsureValid(product, "Name", "Description", "Category", "Price"); 

    // If it's a new product, just attach it to the DataContext 
    if (product.ProductID == 0) 
     productsTable.InsertOnSubmit(product); 
    else { 
     // If we're updating an existing product, tell the DataContext 
     // to be responsible for saving this instance 
     productsTable.Attach(product); 
     // Also tell the DataContext to detect any changes since the last save 
     productsTable.Context.Refresh(RefreshMode.KeepCurrentValues, product); 
    } 

    productsTable.Context.SubmitChanges(); 
} 

더 게시하려면 알려주세요. book's site에서이 앱의 모든 소스 코드를 다운로드 할 수 있습니다. 앱은 "Chapter 04 to 06 - SportsStore"디렉토리에 있습니다.

ASP.NET MVC 멍청한 탓에 DataContext에 특정 필드를 업데이트하지 말라고하는 생각이 맞는지 확실하지 않습니다. 다른 사람이 더 좋은 계획을 가지고 있다면, 나는 아이디어에 대해 개방적입니다. 목표는 업데이트시 데이터베이스의 이미지를 보존하는 것입니다.

답변

1

어쩌면 이것은 my problem here의 반대입니다. 에 키 라인을 변경해보십시오 :

memberCache.Set(metaMember.Ordinal, false); 

당신은 당신의 데이터 컨텍스트에 SubmitChanges를 재정 의하여이 사용할 수 있어야합니다, 나는 그것이 유일한 대답 나는이 원인을 받아 들일 것 같아요

public override void SubmitChanges(ConflictMode failureMode) 
{ 
    foreach(object obj in GetChangeSet().Updates) { 
     // toggle 
    } 
    base.SubmitChanges(failureMode); 
} 
+0

음 ... DB에 이미지를 유지하기 위해 데이터베이스 트리거를 사용하여 종료되었습니다. 나는 그것이 꽤 해킹 된 것을 안다. 그러나 그것은 일을 끝내는 가장 간단한 길인 것처럼 보였다. –

관련 문제