2015-02-11 111 views
3

我插入大量的記錄像20K使用批量插入,它將工作正常,當我只插入一個實體。但是當我用來插入一對多的多個實體時,它只會插入未插入子實體的父實體。批量插入實體框架

我的實體和代碼

Customer.cs 
    public class Customer 
    { 
     public Customer() 
     { 
      this.AccountCustomers = new HashSet<AccountCustomer>(); 
     } 
     public int CustomerId{get;set;} 
     public int CustomerName{get;set;} 
     public virtual ICollection<AccountCustomer> AccountCustomers { get; set; } 
    } 

AccountCustomer.cs 
    public partial class AccountCustomer 
     { 
     public int CustomerId { get; set; }   
     public string CustomData { get; set; } 
     public System.DateTime CreatedDate { get; set; }  

     public virtual Customer Customer { get; set; } 
     } 

My code: 
    List<Customer> customerList = CreateCustomer(); 
    for (int index = 0; index < 20000;index++) 
     { 
      Customer customer = new Customer(); 
      customer.CustomerName= "Parthi"; 
      AccountCustomer accountCustomer = new AccountCustomer(); 
      accountCustomer.CustomdData= "customdata"; 
      accountCustomer.CreatedDate = DateTime.UtcNow; 
      customer.AccountCustomers.Add(accountCustomer); 
      customerList.Add(customer); 
     } 

     private static void AddCustomer(List<Customer> customerList) 
     { 
     using (var ctx =new Directdialogs()) 
     { 
      using (var transactionScope = new TransactionScope()) 
      { 
       try 
       { 
        ctx.BulkInsert(customerList); 
        ctx.SaveChanges(); 
        transactionScope.Complete(); 
       } 
       catch(Exception ex) 
       { 
        transactionScope.Dispose(); 
       } 
      } 
     } 
    } 

這是我的代碼,但它會插入只有客戶實體數據未將帳戶的客戶數據,是批量插入不支持插入多個實體有人知道幫我。

在此先感謝。

+0

'BulkInsert'是一種擴展方法。 – Dai 2015-02-11 04:11:27

+0

什麼是'BulkInsert'?不是EF中的東西 – Shoe 2015-02-11 04:34:20

+0

它在實體框架6中的朋友。 – parthicool05 2015-02-11 04:36:39

回答

7

您正在使用的EntityFramework.BulkInsert項目(BulkInsert來自此第三方項目而非EF6)僅支持一次批量插入到一個表中。

如果您希望項目能夠一次插入多個表以便能夠處理子實體,那麼您將需要修改代碼以便自己完成它(如果您自己編寫代碼,請分享並貢獻它代碼返回到項目)。

編輯:但是,這可能比你乍一看更難。您將無法知道在大容量插入操作期間可靠設置的具有標識值的列(無論是int標識還是uniqueidentifier),因此設置外鍵關係可能非常困難。在插入之前,您可能需要預先設置任何標識值。