6

Đây là kịch bản, tôi có một trang web, mà trong một yêu cầu HTTP (HTTP POST), tôi cần phải làm như sau:Khuôn khổ thực thể 4.1 - Cách "Buộc" EF để chuyển sang DB thay vì sử dụng biểu đồ?

  1. Grab một đối tượng (giả sử "Tag")
  2. Lưu số đối tượng khác (hãy nói "Câu hỏi")
  3. Nhận bản sao mới của "Thẻ".
  4. Chuyển hướng đến một trang khác, cần bản sao mới của "Thẻ".

Phía sau hậu trường, 2) liên quan đến trình kích hoạt phía cơ sở dữ liệu ảnh hưởng đến dữ liệu trên "Thẻ".

Vì vậy, khi tôi làm 3), EF là kéo cùng một bản sao của đối tượng từ bước 1), vì nó trong đồ thị/bộ nhớ trong (ví dụ cùng một kết nối/bối cảnh)

Tôi cần một "tươi" bản sao của đối tượng.

Trong quá khứ, tôi đã sử dụng Detach, sau đó tôi thực hiện truy vấn EF và đối tượng mới nhất được tìm nạp từ DB.

Nhưng tôi không có quyền truy cập vào đối tượng ở đây mỗi lần (tôi có DTO, đang trở về từ kho lưu trữ của tôi), vì vậy tôi không có gì để chuyển sang phương thức Detach.

Có cách nào để nói:

var fresh = db.Tags.Find(1, ignoreGraph: true) 

Hoặc là có thay thế khác?

Như đã đề cập, tôi đang trên Entity Framework 4.1, C# 4 (và ASP.NET MVC 3)

Giải pháp duy nhất tôi có thể nhìn thấy ngay bây giờ là phải vượt qua một tham số chuỗi truy vấn đến trang tiếp theo, sau đó lấy bản sao mới (vì đó là ngữ cảnh mới, đồ thị mới, v.v.).

+0

thể trùng lặp của http://stackoverflow.com/questions/7639219/reload-object-in-an-entity -framework-content-with-updated-values ​​/ 7639578 –

+0

@nathan - có thể, nhưng câu trả lời sẽ không có ích, vì tôi không có quyền truy cập đối tượng 'umbrella' (hoặc đối tượng' tag' ở đây) cho cuộc gọi 'context.Refresh (RefreshMode.StoreWins, umbrella)'. – RPM1984

+0

và cũng có thể là EF4 chứ không phải EF4.1. Có vẻ như phương thức "Làm mới" đã bị xóa khỏi DbContext. – RPM1984

Trả lời

13

Tìm thấy câu trả lời của tôi, tôi nghĩ rằng:

Context.Entry<T>(entity).Reload() 

Đang cố gắng bây giờ ...

+0

Tôi không có quyền truy cập vào 'entity', chỉ' dtoEntity'. – RPM1984

+1

Nếu bạn muốn làm mới thực thể, bạn phải biết thực thể nào cần làm mới, phải không? Nếu bạn biết chìa khóa của thực thể bạn vẫn có thể tìm thấy nó trong bộ theo dõi thay đổi và sau đó tải lại nó. –

+0

@Ladislav, tôi có một chỉ mục duy nhất, không phải là thực thể. Ví dụ: tôi tìm 'Find(). SingleOrDefault (x => x.UniqueUri == someUri)'. – RPM1984

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