7

Tôi đang sử dụng khung thực thể với các mẫu T4 thực thể tự theo dõi, theo mặc định sẽ tạo ra một truy vấn SQL thiết lập tất cả các thuộc tính trên thực thể trong một câu lệnh UPDATE. Tôi chỉ muốn một câu lệnh UPDATE có chứa các thuộc tính được sửa đổi.Làm cách nào để lấy Entity Framework chỉ cập nhật các thuộc tính được sửa đổi trong SQL được tạo ra?

tôi sửa đổi Mẫu T4 như quy định trong cuốn sách: Entity Framework Recipes: A Problem-Solution Approach trang 503.

tôi đã thay đổi dòng này trong Template T4:

OriginalValueMembers originalValueMembers = new OriginalValueMembers(false, metadataWorkspace, ef); 

Làm cho Entity theo dõi từng thay đổi sở hữu thay vì chỉ cần theo dõi rằng thực thể đã thay đổi.

Và cũng

context.ObjectStateManager.ChangeObjectState(entity, EntityState.Unchanged); 

Sau khi thực hiện những thay đổi này tôi nhận được kết quả mong muốn của câu lệnh SQL với chỉ các giá trị/tài sản sửa đổi trong câu lệnh UPDATE. Tuy nhiên, có một tác dụng phụ lạ lùng. Khi cập nhật một thuộc tính INT có thể null từ null thành một cái gì đó khác null, sự thay đổi của nó bị bỏ qua bởi Entity Framework. Mô hình tự theo dõi cho thấy sự thay đổi trong ChangeTracker với giá trị null chính xác ban đầu, nhưng khi Entity Framework cố gắng tạo ra câu lệnh SQL UPDATE, nó không thấy thay đổi thuộc tính nếu giá trị ban đầu null và giá trị mới không phải là rỗng. Tôi đã làm việc nếu giá trị ban đầu không phải là null và giá trị được thay đổi.

Dường như nó hoạt động tốt trên một thuộc tính chuỗi đi từ null thành giá trị không null, nhưng int? không hoạt động.

Có ai có ý tưởng nào không?

+0

Nếu bạn đăng mã hoặc XML, ** vui lòng ** làm nổi bật các dòng đó trong trình chỉnh sửa văn bản và nhấp vào nút "mã" (101 010) trên thanh công cụ của trình chỉnh sửa để định dạng và đánh dấu cú pháp độc đáo! –

+1

Mẫu STE có thể có lỗi. Cuộc thảo luận này có thể giúp http://stackoverflow.com/questions/3598550/are-nullable-foreign-keys-allowed-in-entity-framework-4/3601768 –

+0

Tôi không có khóa ngoại giao nào liên quan đến bảng tôi sử dụng. Nó chỉ là 1 thực thể không có khóa ngoại. Liên kết của bạn ở trên dường như là cùng một vấn đề, nhưng vẫn không có giải pháp. –

Trả lời

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