Không có Detach(object entity)
trên DbContext
.
Tôi có khả năng tách các đối tượng trên mã EF trước không?
Không có Detach(object entity)
trên DbContext
.
Tôi có khả năng tách các đối tượng trên mã EF trước không?
Câu trả lời:
Nếu bạn muốn tách đối tượng hiện có, hãy làm theo lời khuyên của @ Slauma. Nếu bạn muốn tải các đối tượng mà không theo dõi các thay đổi, hãy sử dụng:
var data = context.MyEntities.AsNoTracking().Where(...).ToList();
Như đã đề cập trong bình luận này sẽ không hoàn toàn tách rời các thực thể. Chúng vẫn được đính kèm và lười tải các tác phẩm nhưng các thực thể không được theo dõi. Điều này nên được sử dụng ví dụ nếu bạn chỉ muốn tải thực thể để đọc dữ liệu và bạn không có kế hoạch sửa đổi chúng.
Đây là một lựa chọn:
dbContext.Entry(entity).State = EntityState.Detached;
entity
phải là một đối tượng cụ thể hóa của một loại là một phần của các lớp mô hình của bạn (Người, Khách hàng, Đơn hàng, v.v.). Bạn không thể trực tiếp chuyển vào <T> IQueryable dbContext.Entry(...)
. Đó có phải là câu hỏi mà bạn muốn nói không?
Detached
. Nếu bạn muốn tải các thực thể từ DB mà không gắn chúng vào bối cảnh (không theo dõi thay đổi), hãy sử dụng AsNoTracking
.
Detached
.
using(ctx){ return ctx....ToList(); }
. Trong những trường hợp như vậy, việc sử dụngAsNoTracking()
sẽ có ý nghĩa rất lớn bởi vì tôi sẽ tiết kiệm việc lấp đầy bối cảnh đối tượng một cách không cần thiết. Tôi đoán nó có thể có một lợi ích tiêu thụ hiệu năng và bộ nhớ đặc biệt là cho các danh sách lớn, phải không?