ad

最好的方法“更少的时间”使用实体框架插入批量插入,不包括两个相干表的重复记录?-英雄云拓展知识分享

匿名投稿 295 2024-01-22

我试图批量插入表“ tu”和“ tuv”(一项与多个关系)的表格,而没有重复的“ tu”表列“ hashtext”的记录,所以我做到了:

    /// <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(保存连接时间)记录以下每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桌子而没有重复的TU,则包括数百万张记录 - 它将好很多。

看答案

一种选择是使用 sqlbulkcopy.

基本上,您将所有数据插入登台表。

然后加入主和登台表, DELETE 匹配的舞台表中的所有记录。

然后 INSERT 进入真实的表格,结果 SELECT DISTINCT 从舞台表。


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:C# asp.net
上一篇:JavaScript变量不变-英雄云拓展知识分享
下一篇:如何针对屏幕尺寸为元素制作动态宽度?-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×