在我的应用程序中,我有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();
这非常有效,但是如果有一种方法可以在没有提交新关键字时提交数据更改,我会感兴趣。该关键字可以有临时标识吗?
非常感谢,
拉杜
答案 0 :(得分:0)
一种方法是将关键字地图缓存在内存中。这样你通常不需要往返数据库来获取id(仅用于未命中)。
如果您想在单个往返中进行更新,可以将其抽象为存储过程。