2010-09-01 33 views
6

Tôi đang phát triển ứng dụng ASP.NET và tôi gặp vấn đề với mô hình EF 4.0.Mô hình EF 4.0 lưu dữ liệu vào bộ nhớ đệm và không phát hiện dữ liệu đã sửa đổi

Mô hình EF phát hiện dữ liệu mới được thêm và xóa, nhưng không phải dữ liệu đã sửa đổi từ cơ sở dữ liệu.

Đây là một ví dụ về vấn đề tôi có.

A- Cơ sở dữ liệu:

Script để tạo ra bảng "nhân viên" cơ sở dữ liệu

CREATE TABLE [dbo].[Employees] 
    (
    [id] [int] IDENTITY(1, 1) 
     NOT NULL, 
    [name] [nvarchar](50) NULL, 
    CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED ([id] ASC) 
    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
     IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
     ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) 
ON [PRIMARY] 

B- Ứng dụng:

Đây là một liên kết cho một dự án mẫu Click Here.

Các bước để tạo lại lỗi:

1- Tạo cơ sở dữ liệu và chạy tập lệnh để tạo bảng.

2- Chèn dữ liệu thử nghiệm vào bảng nhân viên và chạy ứng dụng. dữ liệu sẽ được tải trong trang mặc định.

3- Thay đổi chuỗi kết nối và chạy ứng dụng.

3- Cập nhật một số giá trị trong cơ sở dữ liệu (trực tiếp tạo thành sql). và làm mới trang

Bạn sẽ thấy rằng ứng dụng vẫn hiển thị dữ liệu cũ, trong khi nếu bạn thêm hoặc xóa mục khỏi bảng, ứng dụng sẽ được thêm hoặc xóa khỏi chế độ xem tương ứng.

Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

6

Đây là hành vi chính xác dựa trên các khái niệm thiết yếu của ORM. Nó cũng hoạt động tương tự cho LINQ to SQL. Lý do cho điều này là mẫu thiết kế được gọi là IdentityMap để đảm bảo rằng mỗi thực thể được xác định bởi khóa của nó được tạo ra chỉ một lần cho bối cảnh đối tượng. Vì vậy truy vấn đầu tiên của bạn tạo ra các truy vấn nhưng các truy vấn tiếp theo của bạn không tạo lại chúng - chúng đã tồn tại. Các mô tả đầy đủ của vấn đề này được mô tả trong này rất đẹp article.

+0

Cảm ơn bạn đã trả lời chi tiết này. –

0

Bạn có thể tránh điều này bằng cách sử dụng đối tượng mới của mô hình tổ chức trong mã của bạn theo mọi phương pháp. Hoặc bạn có thể đọc thêm thông tin trong câu trả lời sau cho cùng một câu hỏi trong MSDN, Click Here

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