私が使用しているDBには3つのテーブルがあります:
Theme [Theme_ID]
ThemeWorkplace [Theme_ID, Workplace_ID, ThemeWorkplace_ID]
UserTheme [User_ID, Theme_ID, UserTheme_ID, UserTheme_AccessType]
現在の職場と現在のユーザーUserTheme_AccessType
のすべてを変更する必要があります。そのようなユーザーとそのようなテーマのテーマが列にない場合は、作成する必要があります。UserTheme.Theme_ID
ThemeWorkplace.Workplace_ID = 2
User_ID = 1
UserTheme
私はそのようなコードを書きましたが、あまりにも長く動作します:
var themeList = (from t in m_Entities.Theme
where (from tw in m_Entities.ThemeWorkplace
where tw.Workplace.Workplace_ID == 2
select tw.Theme.Theme_ID).Contains(t.Theme_ID)
select t)
.ToList();
foreach (Theme theme in themeList)
{
var oldUserTheme = GetByUserTheme(user/*user is given*/, theme);
if (oldUserTheme == null)
{
/* create new User Theme with params, that I need*/
this.Add(newUserTheme, true);
}
else
{
/* here - changing found row */
oldUserTheme.UserTheme_AccessType = 2;
}
}
このコードがデータベースにアクセスする回数が多すぎることを理解しています。私は取り除く方法を見つけたい:
var oldUserTheme = GetByUserTheme(user/*user is given*/, theme);
すべてのforeach
反復で。誰か助けてくれませんか?
GetByUserTheme() のコードを追加:
private UserTheme GetByUserTheme(User user, Theme theme)
{
return m_Entities.UserTheme.FirstOrDefault(ut => ut.User.User_ID == user.User_ID && ut.Theme.Theme_ID == theme.Theme_ID);
}