34

Được rồi, vì vậy tôi mới dùng cả EF và LINQ. Tôi đã tìm ra cách để INSERT và DELETE nhưng vì một số lý do UPDATE dường như thoát khỏi sự nắm bắt của tôi.LINQ to Entities cách cập nhật hồ sơ

Dưới đây là một mẫu mã của tôi:

EntityDB dataBase = new EntityDB(); 
Customer c = new Customer 
{ 
    Name = "Test", 
    Gender = "Male 
}; 
dataBase.Customers.AddObject(c); 
dataBase.SaveChanges(); 

Trên đây tạo ra và thêm một kỷ lục tốt.

Customer c = (from x in dataBase.Customers 
      where x.Name == "Test" 
      selext x).First(); 
dataBase.Customers.DeleteObject(c); 
dataBase.SaveChanges(); 

Ở trên có hiệu quả xóa hồ sơ được chỉ định.

Bây giờ, làm cách nào để cập nhật? Tôi không thể tìm thấy phương thức "UpdateObject()" trên bộ sưu tập đối tượng.

+0

Nếu bạn đang sử dụng EF4, tôi muốn giải pháp này http://stackoverflow.com/questions/623672/update-entity-framework-objects –

Trả lời

73

Chỉ việc điều chỉnh một trong các đối tượng trả về:

Customer c = (from x in dataBase.Customers 
      where x.Name == "Test" 
      select x).First(); 
c.Name = "New Name"; 
dataBase.SaveChanges(); 

Lưu ý, bạn chỉ có thể cập nhật một thực thể (một cái gì đó mà kéo dài EntityObject, không phải cái gì mà bạn đã dự kiến ​​sử dụng một cái gì đó giống như select new CustomObject{Name = x.Name}

+0

tôi đã làm cái đó. Đối với một số lý do nó không phải là sự bền bỉ những thay đổi đối với cơ sở dữ liệu. – Chev

+1

Nevermind. Điều đó hiệu quả. Tôi đã nhìn vào dữ liệu sai. – Chev

+0

@Chevex: Nhưng lưu ý rằng nó có liên quan nhiều hơn khi sử dụng một cá thể ngữ cảnh khác. –

3

Cả hai đều theo dõi các thay đổi của bạn đối với bộ sưu tập, chỉ cần gọi phương thức SaveChanges() sẽ cập nhật DB.

6

// để cập nhật

(from x in dataBase.Customers 
     where x.Name == "Test" 
     select x).ToList().ForEach(xx => xx.Name="New Name"); 

// cho xóa

dataBase.Customers.RemoveAll(x=>x.Name=="Name");