【问题标题】:Linq to SQL construct link table more efficientLinq to SQL 构造链接表更高效
【发布时间】:2010-12-28 09:50:39
【问题描述】:

在我的应用程序中,我有 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();

这很好用,但如果有一种方法可以在使用新关键字时不提交数据更改,我会很感兴趣。该关键字可以有一个临时 ID 吗?

非常感谢,

拉杜

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多