2010-12-28 1 views
0

より効率的なSQL構文のリンクテーブルに私は3つのテーブルを持っています。問題は、VideoKeywordsテーブルを効率的に構築する方法です。LINQの私のアプリケーションで

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を持つことができますか?

どうもありがとう、

ラドゥ

答えて

0

一つのアプローチは、メモリ内のキーワードマップをキャッシュすることであろう。そうすれば、IDを取得するためにdbにラウンドトリップする必要は通常ありません(ミスの場合のみ)。

一回の往復でアップデートを実行する場合は、ストアドプロシージャに抽象化することができます。

関連する問題