マルチサイト Web サイトを扱うのに役立つ Model Binder があります。各 StoreObject には、SiteThemes のコレクションがあります。
public class StoreObject
{
.......
public virtual ICollection<SiteTheme> SiteThemes { get; set; }
}
次に、新しいテーマでデータベースを更新するリポジトリ オブジェクトを呼び出します。
public void SaveAndSetSiteTheme(SiteTheme t)
{
context.SiteThemes.Where(f => f.StoreObjectID == t.StoreObjectID).ToList().ForEach(p => p.Active = false);
if (t.SiteThemeID == 0)
{
t.Active = true;
context.SiteThemes.Add(t);
}
context.SaveChanges();
}
それが完了すると、以下の Model Binder には正しいデータとストアが含まれます。SiteThemes には 1 つのテーマが含まれます。しかし、もう一度ページを更新すると、この Model Binder は古くなっています。store.SiteThemes コレクションは元の状態に戻り、空になります。地球上で何が起こっているのかわかりません。助けていただくか、さらに情報が必要な場合はお知らせください。
public class StoreModelBinder : IModelBinder
{
private const string sessionKey = "Store";
private IStoreObjectRepository storeRepository;
public StoreModelBinder()
{
storeRepository = new StoreObjectRepository();
}
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
Uri url = HttpContext.Current.Request.Url;
string dom = url.Host;
StoreObject store = storeRepository.Stores.FirstOrDefault(s => s.MainURL == dom);
if (store != null)
HttpContext.Current.Session[sessionKey] = store;
return store;
}
}