2013-03-13 26 views
5

Nếu tôi tải đối tượng thực thể và sau đó gán một thuộc tính cho cùng một giá trị như trước đây, thì khung công tác phát hiện thay đổi hay nó sẽ đặt cờ IsModified thành true?Khung thực thể có so sánh các giá trị được gán với bản gốc để xác định cờ IsModified không?

Đây là cách tạo mã cho Tên lĩnh vực trông giống như:

OnNameChanging(value); 
ReportPropertyChanging("Name"); 
_Name = StructuralObject.SetValidValue(value); 
ReportPropertyChanged("Name"); 
OnNameChanged(); 

Tôi không biết những sự kiện thiết lập cờ IsModified cho lĩnh vực đó và cho toàn bộ tổ chức.

+0

Chỉ cần thử, bạn sẽ tìm ra đủ nhanh. –

Trả lời

3

Ngữ cảnh của bạn chỉ theo dõi nếu dữ liệu của bạn đã được sửa đổi, không phải nếu dữ liệu đó khác nhau.

Bạn có thể làm một kiểm tra như thế này:

private void CheckIfDifferent(DbEntityEntry entry) 
    { 
     if (entry.State != EntityState.Modified) 
      return; 

     if (entry.OriginalValues.PropertyNames.Any(propertyName => !entry.OriginalValues[propertyName].Equals(entry.CurrentValues[propertyName]))) 
      return; 

     (this.dbContext as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity).ChangeState(EntityState.Unchanged); 
    } 

nguồn: https://stackoverflow.com/a/13515869/1339087

+1

Nó không rõ ràng với tôi những gì "chỉ khi dữ liệu đã được sửa đổi, không nếu nó khác" có nghĩa là. Bạn có thể làm rõ. – alpav

+2

chỉ khi dữ liệu được sửa đổi có nghĩa là nếu giá trị thay đổi ở tất cả, thậm chí trở lại giá trị ban đầu của nó :) – Nikos

2

Dường như mọi thứ đã khác bây giờ (EF6). Tôi đã nghiên cứu điều này để xem liệu tôi có cần sử dụng câu lệnh if khi thiết lập các giá trị thuộc tính để xem liệu "giá trị mới" có khác không. Tôi đã thử nghiệm với các mục sau và pháp nhân không được đánh dấu là đã sửa đổi:

var things = dbContext.Things.AsQueryable(); 
var thing = things.First(); 
string name = thing.Name; 
thing.Name = name; 
var entry = dbContext.Entry(thing); 
var state = entry.State; 
int count = dbContext.ChangeTracker.Entries().Count(e => e.State == EntityState.Modified); 
var modified = entry.Property(x => x.Name).IsModified; 
Các vấn đề liên quan