-1
私はこれでしたので、私は「TU」テーブル列「HashText」の無重複レコードをテーブルに挿入バルクに「TU」と「TUV」(多くの関係1)をしようとしています:2つの関連するテーブルの重複レコードを除いて、エンティティ・フレームワークを使用して一括挿入するベスト・ウェイ「時間の短縮」?
/// <summary>
/// Check if the selected TranslationUnit is exsists at db.
/// </summary>
/// <param name="translationUnit"></param>
/// <returns></returns>
public bool CheckDuplicate(TranslationUnit translationUnit)
{
int FoundedTusCount = db.TUs.Where(tu => tu.HashText == translationUnit.Hash && TmIDList.Any(tm => tm == tu.TMID)).Count();
if(FoundedTusCount > 0)
{
return true;
}
return false;
}
これはをDBへの多くの接続と多くの時間。その後
)addRangeを(使用してデータベースにこのようなすべての10000(接続時間を節約)レコードが残っ項目を挿入します。これは、保存機能である
foreach (TranslationUnit item in Options.TMXFile.Data.Body.TranslationUnits.ToList())
{
TU tu = FillTU(TMID, item);
ReadyTUs.Add(tu);
tu.TUVs = new List<TUV>();
foreach (TranslationUnitVariant item1 in item.TranslationUnitVariants)
{
tu.TUVs.Add(FillTUV(item1));
}
if (ReadyTUs.Count >= 10000)
{
Save();
}
}
Save();
を:
private void Save()
{
db.TUs.AddRange(ReadyTUs);
db.SaveChanges();
ReadyTUs.Clear();
db.Dispose();
db = new GTMEntities();
}
私の主な問題今は時間とDBへの多くの接続ですので、TUとTUVテーブルを一括して挿入する方法があれば、数百万のレコードが含まれています。
1つのアイデアは、ステージングテーブルTU_RAWにすべてを一括挿入することです。次に、ストアドプロシージャを使用してTUに実際の挿入を行います。これは通常、時間を短縮し、db接続を低下させます。 – Jesse
SQL Serverを直接使用できる場合は、Entityフレームワークより高速です –