2008-10-01 28 views
9

khung Entity cung cấp sự linh hoạt tuyệt vời để cập nhật dữ liệu trong cùng một DataContextLàm thế nào để cập nhật đối tượng không có dữ liệu ngữ cảnh

Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p) 
personA.name = txtName.value 
datacontext.savechanges() 

Nếu tôi phải di chuyển chức năng Cập nhật này cho lớp dịch vụ mà chỉ mất "Person" trong yêu cầu , cách tốt nhất để gán đối tượng yêu cầu "Person" của tôi vào datacontext mà không cần sao chép sâu một lần nữa?

Trả lời

12

Bạn cần phải đính kèm đối tượng đối tượng của mình vào ngữ cảnh dữ liệu.

Bạn cũng cần mở rộng lớp ngữ cảnh dữ liệu của mình một phần bằng phương thức AttachUpdeted. Khi bạn đính kèm một đối tượng vào một bối cảnh dữ liệu, nó không biết rằng các bản cập nhật đã được thực hiện. Mã dưới đây sẽ cho biết bối cảnh dữ liệu mỗi thuộc tính đã được cập nhật và cần được ghi vào cơ sở dữ liệu.

public static void Save(EntityObject entity) 
{ 
    using(MyContext ctx = new MyContext) 
    { 
    ctx.AttachUpdated(entity); 
    ctx.SaveChanges(); 
    } 
} 

public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached) 
{ 
    if (objectDetached.EntityState == EntityState.Detached) 
    { 
     object original = null; 
     if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original)) 
     obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached); 
     else 
     throw new ObjectNotFoundException(); 
    } 
} 

article 1
article 2

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