Tôi đang sử dụng Entity Framework 4.1 Code Đầu tiên. Có cách nào để xây dựng một danh sách các thuộc tính đã thay đổi kể từ khi thực thể được nạp từ cơ sở dữ liệu không? Tôi biết mã đầu tiên phát hiện rằng một đối tượng đã được thay đổi, nhưng là có một cách để có được chính xác những gì tài sản đã thay đổi?EF 4.1 Code Đầu tiên - Xác định những thuộc tính đã thay đổi
Trả lời
Đối với tài sản vô hướng và phức tạp, bạn có thể sử dụng sau đây để trích xuất các tên thuộc tính thay đổi của một thực thể myEntity
:
var entry = context.Entry(myEntity);
var namesOfChangedProperties = entry.CurrentValues.PropertyNames
.Where(p => entry.Property(p).IsModified);
Một số điều cần lưu ý ở đây:
CurrentValues.PropertyNames
chỉ chứa vô hướng và các thuộc tính phức tạp, không phải thuộc tính điều hướng.tính Complex có nghĩa là: Chỉ có tên của thuộc tính phức tạp được công bố trên thực thể, không phải là tài sản cá nhân thực tế của các loại phức tạp riêng của mình, ví dụ: Nếu bạn có mô hình này ...
[ComplexType] public class Address { public string Country { get; set; } public string City { get; set; } } public class Person { public int Id { get; set; } public string Name { get; set; } public Address Address { get; set; } }
... sau đó, nếu
myEntity
là mộtPerson
,CurrentValues.PropertyNames
sẽ chứa "Id", "Tên" và "Địa chỉ" nhưng không "Address.Country" hoặc "Address.City "(cũng không" Quốc gia "hoặc" Thành phố ").Nếu một tài sản phức tạp được đánh dấu là sửa đổi (
.IsModified
trong đoạn code trên làtrue
) sau đó điều này có nghĩa rằng một trong hai tài liệu tham khảo (Person.Address
trong ví dụ trên) đã thay đổi, không có vấn đề nếu thực sự là giá trị tài sản (Country
vàCity
) bên trong loại phức tạp đã thay đổi hay không. Hoặc bất kỳ thuộc tính nào của loại phức tạp đã thay đổi (Country
hoặcCity
đã thay đổi). Tôi tin rằng không thể tìm ra cái nào, vì EF luôn gửi lệnh UPDATE cho tất cả các thuộc tính kiểu phức hợp loại cơ sở dữ liệu, ngay cả khi chỉ có một thuộc tính đã thay đổi và thuộc tính khác không thay đổi. Tôi sẽ kết luận rằng EF không theo dõi các thay đổi của các thuộc tính kiểu phức tạp riêng lẻ.
- 1. EF 4.1 Code Đầu tiên - Tôi nên sử dụng mẫu nào?
- 2. Multipleactiveresultsets trong Entity Framework 4.1 Code Đầu tiên
- 3. Loại dữ liệu XML trong EF 4.1 Mã Đầu tiên
- 4. Lọc thuộc tính điều hướng trong Mã EF Đầu tiên
- 5. EF 4.1 Mã đầu tiên ModelBuilder HasForeignKey cho một mối quan hệ
- 6. Lập bản đồ TPT trong mã EF Đầu tiên 4.1 w/Các khóa chính khác nhau
- 7. Xác thực mô hình EF Code đầu tiên dựa vào cơ sở dữ liệu hiện có
- 8. Thay đổi thuộc tính cột GridView từ code-behind
- 9. Inheritance EF Code-First
- 10. EF Code Đầu tiên: Bao gồm không hoạt động trên mối quan hệ tùy chọn
- 11. WebApi với EF Code Đầu tiên tạo ra lỗi khi có quan hệ cha mẹ con
- 12. EF 4.1 Cập nhật 1 Mã Đầu tiên + Nhà cung cấp thành viên ASP.NET
- 13. Có thể tắt Cập nhật/Xóa trên EF Code Các thực thể đầu tiên không?
- 14. EF-Code đầu tiên loại phức tạp với một tài sản hàng hải
- 15. EF 4.1 Mã đầu tiên: Mỗi tên thuộc tính trong một loại phải là lỗi duy nhất trên liên kết Bảng tra cứu
- 16. EF 4.1 mã đầu tiên: Cách đặt hàng thuộc tính điều hướng khi sử dụng Bao gồm và/hoặc Chọn phương pháp?
- 17. EF 4.1 Mã Đầu tiên chính nước ngoài cho biết thêm thêm cột
- 18. Entity Framework 4.1 Thuộc tính InverseProperty
- 19. EF6/Code Đầu tiên: Siêu chậm trong lần truy vấn đầu tiên, nhưng chỉ trong Debug
- 20. Entity Framework 4 Code Đầu tiên và toán tử mới()
- 21. Làm cách nào để dừng EF (Mã đầu tiên) Kiểm tra các thay đổi lược đồ
- 22. Tại sao EF DataBase đầu tiên không sử dụng getdate()?
- 23. Cascade Xóa Rule trong EF 4.1 Mã đầu tiên khi sử dụng Hiệp hội Shared Primary Key
- 24. Tạo trường loại tiền bằng mã EF đầu tiên CTP5
- 25. Nhận thuộc tính JSON đầu tiên
- 26. Entity Framework 4.1 Thuộc tính ảo
- 27. Lỗi jsLint "Không thể đặt thuộc tính 'đầu tiên' chưa được xác định '
- 28. MVC3 với EF 4.1 và EntityState.Modified
- 29. Entity Framework DB đầu tiên: Chuyển đổi Bảng Associative tới phần Định hướng Thuộc tính
- 30. Cách ghi đè chính xác hàm SaveChanges trong EF 4.1
tuyệt vời, cũng hoạt động cho tôi với khung Entity 6! –