Tôi chuyển dữ liệu giữa khung thực thể và lớp doanh nghiệp và lớp người dùng bằng cách sử dụng Đối tượng chuyển dữ liệu. Tôi có một số nghi ngờ, nếu tôi lấy một đối tượng được chuyển đổi thành một DTO, làm cách nào để cập nhật đối tượng chính xác trong khung thực thể chứ không phải chỉ cần chèn một bản sao?Cập nhật đối tượng khung thực thể
24
A
Trả lời
2
Bạn cần phải bao gồm khóa chính hoặc khóa thay thế trong DTO, sau đó đối sánh khóa đó lại với thực thể EF chính xác khi cập nhật.
7
một câu hỏi cũ, nhưng chỉ trong trường hợp ai đó cần một giải pháp mã:
Ví dụ:
public void EditArticle(
Article article, string articleTypeId, string[] categoryId)
{
var id = 0;
Article art = de.ArticleSet
.Include("ArticleTypes")
.Include("Categories")
.Where(a => a.ArticleID == article.ArticleID)
.First();
var count = art.Categories.Count;
for (var i = 0; i < count; i++)
{
art.Categories.Remove(art.Categories.ElementAt(i));
count--;
}
foreach (var c in categoryId)
{
id = int.Parse(c);
Category category = de.CategorySet
.Where(ct => ct.CategoryID == id).First();
art.Categories.Add(category);
}
art.Headline = article.Headline;
art.Abstract = article.Abstract;
art.Maintext = article.Maintext;
art.DateAmended = DateTime.Now;
art.ArticleTypesReference.EntityKey = new EntityKey(
"DotnettingEntities.ArticleTypeSet",
"ArticleTypeID",
int.Parse(articleTypeId)
);
de.SaveChanges();
}
28
Đoạn mã dưới đây sẽ cập nhật một thực thể EF 4 đã được tạo ra như thông số bộ điều khiển trong MVC từ chế độ xem được nhập mạnh mẽ:
Dường như mẹo là sử dụng ObjectStateManager để thay đổi trạng thái f rom Đã thêm vào Đã sửa đổi khi thực thể đã được thêm vào ngữ cảnh.
MyEntities db = new MyEntities();
db.Product.AddObject(product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
return db.SaveChanges() > 0;
Theo @Sean Mills bình luận nếu bạn đang sử dụng sử dụng EF5:
((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Added);
4
//I am replacing player :)
public ActionResult ProductEdit(string Id, Product product)
{
int IdInt = DecyrptParameter(Id);
MyEntities db = new MyEntities();
var productToDetach = db.Products.FirstOrDefault(p=> p.Id == IdInt);
if (product == null)
throw new Exception("Product already deleted"); //I check if exists, maybe additional check if authorised to edit
db.Detach(productToDetach);
db.AttachTo("Products", product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
db.SaveChanges();
ViewData["Result"] = 1; // successful result
return View();
}
2
này nên làm việc cho EF 5: https://stackoverflow.com/a/11749716/540802:
db.Entry(product).State = EntityState.Modified;
Các vấn đề liên quan
- 1. Thực thể cập nhật đối tượng khung cùng với các thực thể con (thêm/cập nhật nếu cần)
- 2. Thực thể Khung làm mới và cập nhật đồng thời
- 3. Không thể cập nhật khung của đối tượng UI trong UITableViewCell
- 4. JDO - Cập nhật đối tượng
- 5. Cập nhật thuộc tính đối tượng javascript?
- 6. Three.js Cập nhật lưới đối tượng TubeGeometry
- 7. Restangular - Nhận đối tượng w/id, chỉnh sửa đối tượng, cập nhật đối tượng
- 8. Tôi có thể trừu tượng Khung thực thể khỏi các đối tượng của mình không?
- 9. Thực hiện tham chiếu đối tượng khung thực thể như nhau cho cùng một đối tượng cơ sở dữ liệu
- 10. Khung thực thể - Chỉ cập nhật các giá trị không rỗng
- 11. Không thể xóa đối tượng vì không tìm thấy đối tượng trong ObjectStateManager trong khung thực thể 5
- 12. Khôi phục trường đã xóa khỏi mô hình khung thực thể W/O xóa đối tượng
- 13. Cách tốt nhất để cập nhật thực thể trong JPA
- 14. Truy cập đối tượng tài liệu của khung bằng JavaScript
- 15. Sử dụng Automapper để cập nhật Thực thể POCO
- 16. Mã khung thực thể đầu tiên: cập nhật SetInitializer ném ngoại lệ
- 17. khung thực thể cập nhật nhiều mối quan hệ: ảo hoặc không
- 18. Đường ray: Cập nhật đối tượng mẹ khi lưu con
- 19. Thay đổi đối tượng phiên khi đối tượng được cập nhật trong C#
- 20. Cập nhật các thuộc tính đối tượng trong cành
- 21. objective-c: Cách cập nhật đối tượng trong NSMutableArray?
- 22. Mongoose, cập nhật giá trị trong mảng đối tượng
- 23. Tìm và cập nhật trong đối tượng json lồng nhau
- 24. AngularJS $ tài nguyên tạo đối tượng mới thay vì cập nhật đối tượng
- 25. Sử dụng thực thể thoáng qua trong Hibernate để cập nhật/Hợp nhất đối tượng liên tục hiện có
- 26. Khuôn khổ thực thể: Tự động cập nhật khóa ngoài khi đặt tham chiếu đối tượng mới
- 27. DDD: Các đối tượng kết nối là đối tượng thực thể hoặc đối tượng giá trị?
- 28. Quyền đối tượng cấp khung đối tượng Django REST
- 29. Cập nhật thực thể bên trong tổng hợp
- 30. đối tượng sao chép từ trình gỡ lỗi nhật thực
Cuối cùng! Tôi đã lãng phí rất nhiều thời gian với các cách giải quyết khác - điều này làm việc tuyệt vời mà không cần phải làm dbObject.Property = passedObject.Property cho mỗi thuộc tính khi cập nhật. – kape123
nếu ObjectStateManager không phải là thuộc tính của ngữ cảnh của bạn thử ((System.Data.Entity.Infrastructure.IObjectContextAdapter) db) .ObjectContext http://stackoverflow.com/a/8968643/678338 –