2010-10-13 28 views
5

Tôi đang cố gắng để có được chức năng của các câu lệnh SQL MERGE trong Entity Framework.Đồng bộ hóa Bản ghi bằng cách sử dụng Khung thực thể

Tại dịch vụ WCF, tôi nhận được danh sách hồ sơ từ ứng dụng khách. Tôi muốn so sánh một trường cụ thể trong TẤT CẢ các bản ghi trong danh sách đối với bảng cơ sở dữ liệu.

-Có bản ghi khớp trong db, tôi cần cập nhật các trường khác trong bản ghi db.

-Nếu không có kết quả phù hợp, tôi cần chèn toàn bộ bản ghi.

-Có bất kỳ bản ghi nào trong bảng db không có trong danh sách tôi cần xóa các bản ghi trong db hay không.

Đây là mã tôi đang đấu tranh cho đến thời điểm này.

 


      //List of people from whatever source 
      List peopleList = GetListOfPeopleFromClient(); 

      using (var ctx = new PeopleEntities()) { 
       foreach (var person in peopleList) { 
        var dbPerson = ctx.People.FirstOrDefault(p => p.FirstName == person.FirstName); 
        if (dbPerson == null) { 
         dbPerson = new Person { FirstName = person.FirstName, LastName = person.LastName }; 
         ctx.People.AddObject(dbPerson); 
        } 
        else { 
         dbPerson.LastName = person.LastName; 
        } 
       } 
       //============ 
       //Yet to figure out how to do: 
       //delete from People where person.FirstName NOT in peopleList.FirstNames 
       //=========== 

       ctx.SaveChanges(); 
      } 

 

Câu hỏi của tôi là: làm thế nào để bạn đạt được điều này một cách thanh lịch?

+0

Mã của bạn là đã hơn tao nhã hơn một số tôi được sử dụng để đạt được một điều rất tương tự gần đây. Tôi sẽ hài lòng với điều đó, trừ khi EF có một chức năng hợp nhất mà cả hai chúng tôi đều không biết? – Chris

+0

@Chris: Cảm ơn. Tôi sợ ai đó sẽ nói với tôi điều đó. Tôi đã hy vọng có một số trick 'linqish' tôi không biết. –

Trả lời

1

Tôi sẽ sử dụng Khung đồng bộ hóa cho tác vụ đó. Nó có vẻ hoàn toàn phù hợp với loại kịch bản đó.

Bạn có thể tìm thấy rất nhiều thông tin về đề tài này trên MSDN

+0

Mặc dù một chút quá mức trong tình huống của tôi, Khung Synch dường như là giải pháp phù hợp nhất. –

+1

Tôi muốn làm chính xác như nhau nhưng không bao giờ có thể tìm thấy bất kỳ ví dụ rõ ràng chứng minh làm thế nào để làm điều đó. Ai đó có thể giúp đỡ? –

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