2015-04-01 20 views
5

Tôi có một mô hình lớnLàm cách nào để kiểm tra thay đổi trong trường Đối tượng mô hình mà không kiểm tra từng trường trong MVC?

public class SomeModel 
{ 
     public int Id { get; set; } 
     .....A lot(24) of Fields here..... 
} 

Bây giờ trên Post ActionResult Edit(somemodel SomeModel) tôi muốn kiểm tra xem mọi thứ đã được thay đổi bằng cách sử dụng liên quan đến các giá trị mô hình ban đầu trong cơ sở dữ liệu với. Sử dụng If Else làm cho rất nhiều mã lộn xộn. Có anyway để kiểm tra xem một cái gì đó đã bị thay đổi bởi người sử dụng và nếu có thể những gì lĩnh vực đã được thay đổi bởi người sử dụng?

+1

Tôi nghĩ rằng bạn sẽ phải mở rộng Equals điều hành: Một cái gì đó như thế này: http: // stackoverflow. com/a/4616717/1910735 –

+0

Xem thêm http://stackoverflow.com/questions/506096/comparing-object-properties-in-c-sharp –

+0

Nếu đây là vấn đề tương tranh và bạn đang sử dụng EF, bạn có thể [kiểm tra hướng dẫn này] (http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/handling-concurrency-with-the-entity-framew ork-in-an-asp-net-mvc-ứng dụng). Ngay cả khi nó không được, họ sử dụng một kỹ thuật thú vị với một dấu thời gian byte [] mà bạn có thể tweek để phục vụ nhu cầu cụ thể của bạn cho ứng dụng của bạn –

Trả lời

3

Tôi đã suy nghĩ về việc sử dụng một phương pháp như thế này một

public class SomeModel 
    { 
    //... 
    public override bool Equals(object obj) 
     { 
     var type = this.GetType(); 
     bool SameObj = true; 
    //for each public property from 'SomeModel' 
    //[EDITED]type.GetProperties().Each(prop=>{ // Sorry i'm using custom extension methode here 
    //you should probably use this instead 
    type.GetProperties().ToList().ForEach(prop=>{ 
         //dynamically checks that they're equals 
         if(!prop.GetValue(this,null).Equals(prop.GetValue(obj,null))){ 
          SameObj=false; 
         } 
        } 
       return SameObj; 
    } 
    } 

/\ Sửa

Các vấn đề liên quan