2012-04-19 29 views
96

Tôi đang cố gắng tạo một cơ sở dữ liệu phát triển với một số dữ liệu thử nghiệm.Cách thêm dữ liệu bằng AddOrUpdate bằng một khóa phức trong EF 4.3

Tôi đã sử dụng context.People.AddOrUpdate(p => p.Id, people)); với nhiều thành công.

Tôi có một bảng khác mà tôi cần phải hạt giống, trong đó tôi sẽ không biết khóa chính.

Ví dụ: tôi muốn AddOrUpdate dựa trên kết hợp tên và họ.

Tôi không chắc chắn cách viết Biểu thức chính xác.

rõ ràng là không chính xác, nhưng tôi hy vọng nó truyền tải giải pháp tôi đang tìm kiếm.

Trả lời

189

Hãy thử điều này:

context.People.AddOrUpdate(p => new { p.FirstName, p.LastName }, people); 
+10

@LadislavMrnka điều gì sẽ xảy ra nếu số nhận dạng cần phải là loại phức tạp, tức là: 'ngữ cảnh.People.AddOrUpdate (p => new {p.Name.FirstName, p.Name.LastName}, people)'? – gabe

+3

@LadislavMrnka, cũng vậy, nếu tài sản là loại vô giá trị thì sao? tức là 'context.People.AddOrUpdate (p => new {p.Birthdate}, mọi người)'? – stack247

+2

Điều cần lưu ý ở đây là bộ sưu tập 'người' cần phải là ARRAY chứ không phải danh sách. Nếu bạn có một danh sách các thực thể, bạn có thể chỉ cần gọi .ToArray() trong danh sách. Tôi đã đấu tranh với cái đó :) - Câu trả lời hay là –

0

Nếu bạn có Only primitive types or enumeration types are supported in this context. vì của việc sử dụng tài sản chuyển hướng - cân nhắc việc thêm tài sản chính nước ngoài trực tiếp cho đơn vị (có thể chỉ với getter) và sử dụng nó như Ladislav Mrnka đề xuất.