Linq to SQL构造链接表更有效率

时间:2010-12-28 09:50:40

标签: .net linq performance linq-to-sql

在我的应用程序中,我有3个表:视频,关键字和VideoKeywords

我使用这些按关键字为视频编制索引。问题是如何有效地构建VideoKeywords表。

我执行以下算法:

foreach (Video video in videosToIndex)
{
   Dictionary<string, int> words = Util.GetDistinctWordsInName(video.Name);

   video.VideoKeywords.Clear();
   foreach (string word in words.Keys)
   {
     int keywordId = keywords.Where(x => x.Name == word).Select(x =>   x.ID).FirstOrDefault();

    if (keywordId == 0)
    {
         Keyword kw = new Keyword() { Name = word };
         dc.Keywords.InsertOnSubmit(kw);
         dc.SubmitChanges();
         keywordId = kw.ID;
         keywords.Add(kw);
    }

    video.VideoKeywords.Add(new VideoKeyword() { VideoID = video.ID, KeywordID = keywordId, Occurrences = words[word] });
    }

     video.IndexedDateTime = DateTime.Now;
   }
   dc.SubmitChanges();

这非常有效,但是如果有一种方法可以在没有提交新关键字时提交数据更改,我会感兴趣。该关键字可以有临时标识吗?

非常感谢,

拉​​杜

1 个答案:

答案 0 :(得分:0)

一种方法是将关键字地图缓存在内存中。这样你通常不需要往返数据库来获取id(仅用于未命中)。

如果您想在单个往返中进行更新,可以将其抽象为存储过程。