エンティティへのLinqを使用してバルク/バッチ挿入を行う方法の例は見つかりません。あなたは一括挿入を行う方法を知っていますか?バルク挿入 - エンティティへのLinqの処理
答えて
モデルを混在させるだけの場合もあります。おそらく、リポジトリのこの部分にSqlBulkCopy
を使用してください(これはバルクコピーAPIに直接接続されるため)。残りの部分はEntity Frameworkを使用します。必要に応じて、直接ADO.NETのビット。最終的には目標を達成することです。
LINQ to Entitiesで一括挿入する方法の完全な例は、http://archive.msdn.microsoft.com/LinqEntityDataReaderを参照してください。 SqlBulkCopyを簡単に使用できるラッパーです。
@Marc Gravellは正しいですが、仕事を完了させるためにモデルをミックスする必要があることがあります。
EFエンティティ(またはプロパティ名が列名と一致する限り、あらゆる種類のオブジェクト)を一括して挿入するクラスを作成しました。
クラスは、バッチサイズのカスタマイズ、プレ後挿入イベント、キューインサート、および「Firehoseモード」(バッチサイズを考慮して10億個のオブジェクトを与える)をサポートしています。
データベースに大量のデータを挿入するためには、私は、リスト内のすべての挿入情報を収集し、DataTable
にこのリストを変換するために使用されます。私はSqlBulkCopy
経由でデータベースにそのリストを挿入します。私は生成されたリストを送って
私はデータベース
に挿入し、InsertData
が
public static void InsertData<T>(List<T> list,string TabelName)
{
DataTable dt = new DataTable("MyTable");
clsBulkOperation blk = new clsBulkOperation();
dt = ConvertToDataTable(list);
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["SchoolSoulDataEntitiesForReport"].ConnectionString))
{
bulkcopy.BulkCopyTimeout = 660;
bulkcopy.DestinationTableName = TabelName;
bulkcopy.WriteToServer(dt);
}
}
public static DataTable ConvertToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}
である私の一括挿入操作
InsertData(LiMyList, "MyTable");
にそれを渡したいすべてのバルクデータの情報が含まれていLiMyList
SqlBulkCopyとカスタムデータウェアハウスを使用してパフォーマンスを最大限に引き出します。その結果、それは通常の挿入またはefbulkinsert延長使用のAddRange
サンプル使用するよりも20倍以上高速である:
context.BulkInsert(hugeAmountOfEntities);
これはすばらしいライブラリです。私は前からSqlBulkCopyのものを書きましたが、これははるかに簡単で迅速です – Andrew
ああのNOE - ここでそれを見つけた死者リンク –
を... https://github.com /matthewschrager/Repository/blob/master/Repository.EntityFramework/EntityDataReader.cs –