2012-02-12 24 views
8

DbSet.Add() thêm một thực thể duy nhất vào DbSet. Nhưng không có DbSet.AddRange() để thêm danh sách các thực thể. Có một phương pháp tôi có thể gọi trực tiếp từ EF cho phép tôi thêm một danh sách các thực thể? Nếu không, có lý do nào tại sao EF không cung cấp phương pháp như vậy?Cách thêm danh sách các thực thể vào DbSet

+0

Bạn có thể viết một phương pháp mở rộng đơn giản để đạt được điều này. – Eranga

+0

Đây là những gì tôi đang làm việc ngay bây giờ. Điều làm tôi bối rối là lý do tại sao EF không cung cấp nó? – hshen

+2

Nó chỉ là một phương pháp tiện ích mà bất cứ ai cũng có thể viết. Có rất nhiều lớp sưu tập không có phương thức 'AddRange'. Cung cấp một API đơn giản với chức năng cốt lõi tốt hơn là một giao diện lộn xộn. – Eranga

Trả lời

6

Nhận xét của Eranga được cho là đúng sự thật. Tôi đoán rằng mối quan tâm thực sự là những gì nên được thực hiện nếu bất kỳ thực thể nào trong danh sách có thuộc tính khóa được đặt nếu khóa cho bảng bên dưới là cột nhận dạng:

  • Ném ngoại lệ? HOẶC
  • đặt khóa thành 0 để một thực thể mới có khóa khác sẽ được chèn vào? HOẶC
  • cập nhật pháp nhân bằng cùng một khóa?

Vì lý do này, nó không có ý nghĩa quá nhiều để thực hiện AddRange() với lớp chung DbSet. Nếu bạn muốn một cái gì đó đặc biệt phù hợp nhu cầu của bạn, bạn có thể mở rộng DbSet như sau

public static class EFExtension 
    { 

     public static void AddRange<TEntity>(this DbSet<TEntity> dbSet, IList<TEntity> entities) where TEntity : class 
     { 
     foreach (TEntity e in entities) 
     { 
      dbSet.Add(e); 
     } 
    } 
    } 
11

Trong EF6 cả DbSet.AddRangeDbSet.RemoveRange có sẵn.

Lý do để triển khai chúng là cải thiện hiệu suất, những gì được thực hiện bằng cách tắt DetectChanges cho mỗi lần thêm hoặc loại bỏ một thực thể riêng biệt.

Thông tin chi tiết:

LƯU Ý: Không có tài liệu chính thức vẫn cho phương pháp này, như EF vẫn là RC1.

CẬP NHẬT: EF6 đã được phát hành và the official documentation for .AddRange() is here, nhưng giải thích về những gì đang xảy ra bên trong nó trong các liên kết ở trên.

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