0

EF를 사용하여 CMS에 기본 CRUD가 있으며 데이터베이스를 먼저 사용하여 삭제 기능을 수행하면 데이터베이스에서 레코드가 삭제됩니다. 대신 실제로 데이터베이스 테이블에서 항목을 삭제하는, 난 그냥에 값을 변경하려면,보기의 고객 지점에서 안전을 위해 지금안전을 위해 mvc3에서 C# delete 함수 변경

public ActionResult Delete(int id) 
    { 
     Database_Table database_table = db.Database_Table.Find(id); 
     return View(database_table); 
    } 


    [HttpPost, ActionName("Delete")] 
    public ActionResult DeleteConfirmed(int id) 
    {    
     Database_Table database_table = db.Database_Table.Find(id); 
     db.Database_Table.Remove(database_table); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     db.Dispose(); 
     base.Dispose(disposing); 
    } 
} 

다음

삭제에 대한 컨트롤러 코드 데이터베이스 '삭제 된', 즉 'N'에서 'Y'로 이동 한 다음 숨길 것이므로 'Y'값을 가진 항목은 사용자 지정 쿼리를 통해 표시되지 않습니다. 그 말이 맞는다면. 내 질문은이 코드를 삭제하지 않고 단지 하나의 값으로 변경하는 것입니다.

나는이 같은 보일 것이다 느낌 :

[HttpPost, ActionName("Delete")] 
    public ActionResult DeleteConfirmed(int id) 
    { 
     if (ModelState.IsValid) 
     { 

     Database_Name database_name = db.Database_Name.Find(id); 
     db.Entry(database_name).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
     } 
      return View(database_table); 
    } 

을하지만, 위치에 대한 정의하는 확실하지 오전이 인스턴스 '삭제'값으로 수정됩니다 유일한 하나 개의 값. 또한 'N'값을 가진 항목 만보기로 되돌아 가야한다고 말할 수도 있습니다.

+0

데이터 액세스에 Entity 프레임 워크를 사용하고 있습니까? – Liam

+0

예 먼저 엔티티 프레임 워크, 데이터베이스를 사용하고 있습니다. – Bohdi

+0

저는 EF와 약간 녹슬었지만, EF로 재교역을 가졌습니다. – Liam

답변

0

이 코드를 사용해보십시오. 나는 다른 계층의 방법에 코드의 이러한 종류의 이동을 권장합니다 (당신이이 방법을 당신의 컨트롤러 액션/당신이 원하는 모든 곳에서 호출하는 새로운 클래스를 만들 수 있습니다.

Database_Name database_name = db.Database_Name.Find(id); 

database_name.Deleted="Y"; 
db.Database_Name.Attach(database_name); 
db.Entry(database_name).State = EntityState.Modified; 
try 
{   
    db.SaveChanges(); 
} 
catch (DbUpdateConcurrencyException ex) 
{ 
    ex.Entries.Single().Reload(); 
    context.SaveChanges();   
} 
catch (Exception ex2) 
{ 
    //some error. Log it 
} 
+0

감사합니다. 지금 구현하고 작동 방식을 확인하려고합니다. 당신의 나의 지속적인 구원자. – Bohdi

0

이해야 conditional mapping에 대한 사용 사례가 될 조건부 매핑이 모든 쿼리에서 자동으로 삭제 된 항목을 필터링합니다.

  • 귀하의 Linq에이
  • 열망로드
  • 게으른 로딩
  • 를 조회

열심히로드되고 게으른로드 된 데이터에서 소프트 삭제 레코드를 필터링하는 신뢰할 수있는 다른 방법은 없습니다.

그러나 조건부 매핑은 또한 단점이 있습니다 이미 (이 모델 삭제 된 레코드를 쿼리 할 수 ​​없을 것) 조건 매핑에 사용되기 때문에

  • Deleted 속성은 엔티티의 일부가 될 수 없습니다를
  • 삭제 작업이 mapped to stored procedure해야합니다 (또는 사용자 정의 SQL하지만 EDMX에서 수동으로 변경해야합니다) 당신이 필요로하는이 완벽하게 작동하려면 코드에서 Deleted 속성에
  • 를 액세스 할 수 없기 때문에 부드러운 당신을 위해 삭제 수행 우리에게 e EDMX 코드는 먼저 저장 프로 시저 매핑을 지원하지 않기 때문에
관련 문제