2016-10-04 10 views
2

複雑なタイプのエンティティをタイムリーに挿入するにはどうすればよいですか?ComplexTypeを持つエンティティのBulkInsert

は、次のことを考えてみましょう:

public class Entity { 
    public Address Address { get; set; } 
} 

[ComplexType] 
public class Address { 
    [ColumnName("Street")] 
    public string Street { get; set; } 
} 

私は、ネストされたプロパティを無視SqlBulkToolsを試してみました。 .CustomColumnMapping(x => x.Address.Street, "Street").AddColumn(x => x.Address.Street)はどちらもクラッシュしませんでしたが、実際には何もしませんでした。

また、EntityFramework.BulkInsert-ef6を試しましたが、これはComplexTypesで混乱してクラッシュします。

ValidateOnSaveEnabledとAutoDetectChangesEnabledをオフにしても、挿入を1つずつ行うのに非常に時間がかかります。新しいコンテキストを作成し、DbContext.SaveChanges()の量で遊んでも役に立ちませんでした。

+3

私の意見では、私はBulkInsertツールがEF6の周りに来るのが好きではありません。多くのサポートはありませんし、今後のバージョンのEFで動作することを保証するものはありません。 (そして、データコンポーネントはそのリスクを取り除くにはコアすぎる)。私がバルク物にしたいときはいつでも。私は古い格好のADO.NET SqlBulkCopyを使用しています。 – gsharp

+0

.NetでSQLを実行する最も効率的な方法は、ADO.Netです。 **何もパフォーマンスのためにこれを打つことはありません。だからパフォーマンスを使用する場合は、ADO.Net SqlBulkCopy(前述のように) – Liam

答えて

0

エンティティフレームワーク拡張ライブラリを使用して簡単に行うことができます。

単なる例:ここでは

//update all Entities with Street of MyStreet to Street of YourStreet 
context.Entities 
    .Where(t => t.Address.Street == "MyStreet") 
    .Update(t => new Entity { t.Address.Street = "YourStreet" }); 

がリンクである:Entity Framework Extended Library

+0

彼は一括挿入を求めています。このライブラリはこの機能を提供していません。 –

-2

免責事項:私はこのライブラリは、複合体と(一括挿入を可能にするプロジェクトEntity Framework Extensions

の持ち主ですタイプ)だけでなく、他のすべてのバルク操作も可能です。

  • BulkSaveChanges
  • BulkInsert
  • BulkUpdate
  • のbulkdelete
  • BulkMerge

// Bulk Insert 
context.BulkInsert(complexTypeEntities); 

// Easy to use 
context.BulkSaveChanges(); 

// Easy to customize 
context.BulkSaveChanges(bulk => bulk.BatchSize = 100); 

ライブラリのサポートすべての種類の継承と関連付けができますが、図書館は無料ではありません。

関連する問題