2010-02-22 2 views
0

주요 변경 사항 및 동작을 추적하기 위해 ASP.NET MVC 응용 프로그램에 대한 감사 테이블을 만들었습니다. 이 테이블의 내용을 권한있는 사용자에게보기 쉬운 형식으로 제시하고자합니다.ASP.NET MVC에서 하이브리드 모델 (다른 모델의 비트 포함) 만들기?

감사 테이블과 같이 (간체)된다

ID (int) | StaffID (int) | Action (string) | Timestamp (datetime) 
----------------------------------------------------------------- 
1987  | 27   | Delete entry: 9 | 2010-02-22 12:30:12 
1988  | 34   | Add user: 912 | 2010-02-22 12:48:19 

을 지금까지 난 그냥 기본 "목록"을 사용하여 MVC에서보기 그러나 우리는 개발의 끝으로 받고 있다는 것을 제시했습니다 StaffID보다는 직원 이름을 보여줌으로써이 견해를 약간 정리하고 싶습니다.

처음에 나는 감사 및 직원과 통과가 모두 포함 된 "하이브리드 모델을"만드는 방법을 사용하고 그 뷰 :

public class AuditModel 
{ 
    public AuditModel(List<Audit> AuditEntries, List<Staff> AllStaff) 
    { 
    this.Audit = AuditEntries; 
    this.Staff = AllStaff; 
    } 

    public List<Audit> Audit { get; private set; } 
    public List<Staff> Staff { get; private set; } 
} 

[AcceptVerbs("GET")] 
public ActionResult ViewAuditTrail() 
{ 
    var Audit = (from a in db.Audits orderby a.Timestamp descending select a).ToList(); 
    var Staff = (from s in db.Staffs select s).ToList(); 
    return View(new AuditModel(Audit, Staff)); 
} 

하지만 그건보기에 어지러움에 이르게 :

  • ID를 :
    <% 
    foreach (var Entry in Model.AuditEntries) 
    { 
        var StaffDetails = Model.AllStaff.Where(s => s.ID == Entry.StaffID).SingleOrDefault(); 
        /* output HTML */ 
    } 
    %> 
    

    그래서 나는 다음과 같은 특성을 가진 새로운 모델을 만들 수 있습니다 무엇을 원하는 것 같아요 (INT)는 - Staff.ID [S => s.StaffID == Staff.ID]

  • 조 (문자열) - -
  • StaffName (문자열) Audit.ID Audit.Action
  • 소인 (날짜) - Audit.Timestamp

컨트롤러에서이 작업을 수행하여 ToList()로보기에 전달하여 내보기를보다 간단하고 간단하게 만들 수 있습니다.

팁이 있습니까?

답변

0

좋아요, 그래서 저는 모험심이 많았고이 문제를 직접 해결하려고 노력했지만 해결 방법을 찾았지만 정확한 결과를 얻지 못했습니다!

그래서, 첫째로, 나는 새로운 클래스 생성 :

public class AuditEntries 
{ 
    public int ID { get; set; } 
    public string StaffName { get; set; } 
    public string Action { get; set; } 
    public System.DateTime Timestamp { get; set; } 
} 

나는 다음과 같이 보는 내 ViewAuditTrail 조치 리팩토링 :

[AcceptVerbs("GET")] 
public ActionResult ViewAuditTrail() 
{ 
    var Audit = (from a in db.Audits orderby a.Timestamp descending select a).ToList(); 

    var AuditEntry = new List<AuditEntries>(); 

    foreach (var e in Audit) 
    { 
    var Staff = (from s in db.Staffs where s.ID == e.StaffID select s).SingleOrDefault(); 

    AuditEntries Entry = new AuditEntries(); 
    Entry.ID = e.ID; 
    Entry.StaffName = Staff.Forename + " " + Staff.Surname + " (" + Staff.ID.ToString() + ")"; 
    Entry.Action = e.Action; 
    Entry.Timestamp = e.Timestamp; 

    AuditEntry.Add(Entry); 
    } 

    return View(AuditEntry.ToList()); 
} 

그리고 지금 내 ViewAuditTrail보기가 단지 강력한 형식됩니다 뷰는 기본 MVC 목록보기 유형을 사용하여 AuditEntries 클래스에 바인딩됩니다.

잘 작동하는 것 같지만 개선 될 수 있다고 확신합니다. 아무에게도 제안 사항이 있습니까?

1

감사 레코드가 생성 될 때 직원의 ID와 이름을 모두 입력하는 것이 좋습니다. 물론 직원 데이터를 삭제하지 않는 한. 필자의 출처는 엔터프라이즈 디렉토리에서 외부에서 관리되기 때문에 일반적으로이 작업을 수행합니다. 감사 테이블에 전체 데이터를 보관하면 작업을 수행하는 사람이 퇴사하고 직원 테이블에서 해당 데이터가 제거 되더라도 원하는 데이터를 얻고 쿼리 데이터를 그대로 유지할 필요가 없습니다. 걱정할 필요가있는 것은 이름 변경뿐입니다. 따라서 ID와 이름을 모두 유지해야 필요에 따라 이름을 수정할 수 있습니다.

+0

감사 데이터 무결성에 대한 관심이 높아 졌기 때문에 Upvoted.이론적으로 직원은 삭제해서는 안됩니다 (앱에 자체 직원 데이터 저장소가 있음).하지만 ID와 이름을 결합한 방식이 좋습니다. 나는 아직도 내 자신의 "하이브리드 모델"을 만드는 방법을 알고 싶다. 왜냐하면 나는 그것을 애플 리케이션의 다른 부분에 사용해야 할 것 같기 때문이다. –

관련 문제