2009-02-09 31 views
15

Tôi đã làm thủ tục mà tôi cần lưu đối tượng thực thể. Vấn đề là tôi không biết nếu thực thể này được gắn vào datacontext của tôi hay không. Để giải quyết vấn đề này, tôi sử dụng mã sau:Phát hiện xem thực thể có được gắn vào một văn bản dữ liệu hay không

try 
{ 
    db.ClientUsers.Attach(clientUser); 
    db.Refresh(RefreshMode.KeepCurrentValues, clientUser); 
} 
catch { } 

db.SubmitChanges(); 

Tôi đang tìm một phương pháp tốt hơn để phát hiện xem thực thể có thuộc về một ngữ cảnh cụ thể hay không.

Trả lời

22

Tôi tự hỏi ... những gì hiện GetOriginalEntityState trả lại cho một đối tượng không được đính kèm? Thậm chí nếu nó ném một ngoại lệ, nó có lẽ sẽ nhanh hơn so với một refresh ...

(cập nhật) - một thử nghiệm cho thấy nó trả về null:

 Customer cust = new Customer(); 
     Customer orig = ctx.Customers.GetOriginalEntityState(cust); 
     Assert.IsNull(orig); 

     cust = new Customer(); 
     ctx.Customers.Attach(cust); 
     orig = ctx.Customers.GetOriginalEntityState(cust); 
     Assert.IsNotNull(orig); 
     Assert.AreNotSame(cust,orig); 

Vì vậy, có lẽ sử dụng GetOriginalEntityState và rà soát for null trở lại giá trị ...

+3

Điều này thật tuyệt! Làm cho một phương pháp mở rộng "IsAttached (Of T)" đẹp cho DataContext. – rossisdead

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