2016-02-15 16 views
5

Có một điểm để lưu thay đổi sau một hành động chỉ đọc không? Các thực thể được tải vào bộ nhớ cache, nhưng không có gì thay đổi, nên lưu các thay đổi được gọi trước khi vứt bỏ?Khuôn khổ thực thể lưu thay đổi

Trả lời

4

Từ doc (DbContext.SaveChanges):

Tiết kiệm tất cả các thay đổi được thực hiện trong bối cảnh này đến cơ sở dữ liệu cơ bản.

Không có điểm nào khi gọi SaveChanges nếu bạn chưa thực hiện bất kỳ thay đổi nào về ngữ cảnh của mình.

Bạn có thể đọc thêm về điều này một cách chi tiết here

Một thực thể có thể ở một trong năm quốc gia theo quy định của liệt kê EntityState. Các trạng thái này là:

  • Added: đơn vị đang được theo dõi bởi bối cảnh nhưng chưa tồn tại trong cơ sở dữ liệu
  • không thay đổi: đơn vị đang được theo dõi bởi bối cảnh và tồn tại trong cơ sở dữ liệu, và tài sản của mình các giá trị không thay đổi từ các giá trị trong cơ sở dữ liệu
  • Đã sửa đổi: thực thể đang được theo dõi bởi ngữ cảnh và tồn tại trong cơ sở dữ liệu và một số hoặc tất cả các giá trị thuộc tính của nó đã được sửa đổi
  • Đã xóa: thực thể đang được theo dõi theo ngữ cảnh và tồn tại trong cơ sở dữ liệu, nhưng đã được đánh dấu để xóa khỏi cơ sở dữ liệu trong lần tiếp theo SaveChanges là gọi
  • tách rời: đơn vị không được theo dõi bởi bối cảnh

SaveChanges làm những việc khác nhau cho các đối tượng ở các bang khác nhau:

  • thực thể không thay đổi được không xúc động SaveChanges. Các cập nhật không được gửi đến cơ sở dữ liệu cho các thực thể trong trạng thái Unchanged.
  • Các đối tượng đã thêm được chèn vào cơ sở dữ liệu và sau đó trở thành Không thay đổi khi SaveChanges trả về.
  • Thực thể được sửa đổi được cập nhật trong cơ sở dữ liệu và sau đó trở thành Không thay đổi khi SaveChanges trả về.
  • Các thực thể đã xóa sẽ bị xóa khỏi cơ sở dữ liệu và sau đó được tách ra khỏi ngữ cảnh.
0

Bạn không cần phải gọi SaveChanges() trừ khi bạn làm bất cứ Add hoặc Update trong Entity.

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