Tôi đã sử dụng Add()
và gặp phải sự cố khi một thực thể cha mẹ được sao chép trong cơ sở dữ liệu khi Add
nhập một đứa trẻ. Sử dụng Attach()
giải quyết vấn đề này nhưng tôi muốn biết tại sao chứ không phải là một cách mù quáng vấp ngã.Khi nào sử dụng DbSet <T> .Thêm() vs DbSet <T> .Attach()
Trả lời
Vâng, khi bạn sử dụng Attach
bạn cho biết ngữ cảnh rằng thực thể đã có trong cơ sở dữ liệu, SaveChanges
sẽ không có tác dụng đối với các thực thể được đính kèm. Add
, mặt khác, thay đổi trạng thái của thực thể trong ngữ cảnh (nếu nó đã có) thành Added
, có nghĩa là nó sẽ luôn chèn thực thể trong cơ sở dữ liệu khi bạn gọi SaveChanges
.
Đó là sự khác biệt.
Cảm ơn bạn đã phản hồi. Tại sao sau đó trong một 'Controller' được tạo tự động trong Edit, nó sử dụng' db.Entry (model) .State = EntityState.Modified; db.SaveChanges(); 'và không' Đính kèm() '? –
Bởi vì khi bạn 'Attach()' một thực thể đã nằm trong ngữ cảnh ** **, vì nó là trường hợp của thực thể được lưu trữ ở biến 'model', nó đặt trạng thái của thực thể thành' Unchanged', do đó nếu bạn sử dụng 'Attach()' cho mục đích này, thực thể của bạn sẽ không được cập nhật khi bạn gọi 'SaveChanges()'. –
- 1. ObjectSet.Context vs DbSet
- 2. iterating over DbSet <TEntity> vs IQueryable <out T>
- 3. Sử dụng IQueryable <TEntity> thay DbSet <TEntity> vấn đề
- 4. Làm cách nào để chuyển đổi IQueryable <Patient> này thành DbSet <Patient>?
- 5. Tạo DbSet <T> động trong Khung thực thể?
- 6. Đang gọi AsQueryable <T> trên DbSet <T> "safe"?
- 7. Có cái gì đó như DbSet <T> .RemoveWhere (Predicate <T>)
- 8. EntityFramework 4, DbSet và ObjectContext
- 9. Tài liệu tham khảo cho DBContext, DBSet <> trong Entity Framework
- 10. Cách thêm danh sách các thực thể vào DbSet
- 11. Sắp xếp dữ liệu bằng EF DbSet
- 12. Giới thiệu về DbSet và DbContext
- 13. Làm cách nào để khái quát hóa quyền truy cập vào DbSet <TEntity> thành viên của DbContext?
- 14. Khi nào nên sử dụng <%# ... %> và <%= ... %>?
- 15. Entity Framework dbset cách hiệu quả nhất xóa
- 16. <applet> vs <object>
- 17. <cstdint> vs <stdint.h>
- 18. ObservableCollection <> vs. List <>
- 19. Truy cập thuộc tính của DbSet theo tên
- 20. Có thể tạo phương pháp chung để thêm các mục vào dbset khung thực thể không?
- 21. Tìm một kỷ lục trong dbSet sử dụng Find mà không có một chìa khóa
- 22. <?> vs <T>
- 23. IEnumerable <T> VS IList <T> VS IQueryable <T>
- 24. VS 2008 tiếp tục xóa và thêm lại <SubType> ASPXCodeBehind</SubType>
- 25. Lỗi: <span> vs <label>
- 26. Sử dụng "<<" hoặc "+" để đặt các chuỗi lại với nhau khi sử dụng "cout"
- 27. XSD Formatting <element><complexType> vs <complexType /><element/>
- 28. Trong MVC, khi nào bạn sử dụng <%= %> và <% %>?
- 29. người bạn trong toán tử == hoặc << khi nào tôi nên sử dụng?
- 30. @OneToMany List <> vs Set <> khác biệt
Tôi nghĩ rằng http://stackoverflow.com/questions/3920111/entity-framework-4-addobject-vs-attach này hy vọng sẽ trả lời câu hỏi của bạn –
Cảm ơn bạn. Điều này cũng giúp: http://stackoverflow.com/a/15310068/1185053 –