我已經做了一些搜索,但一直未能弄清楚如何將LinqToSql數據上下文與指定連接字符串綁定到不同的存儲庫。如何使用LinqToSQL和存儲庫模式爲ASP.NET MVC配置Ninject
當綁定路由時,此綁定在global.ajax中執行。我使用相當標準的存儲庫模式將LinqToSql基礎結構與應用程序分離,以便將來可以更改技術基礎結構(NHibernate,EntityFramework等)。另外,讓我的代碼很容易單元測試和嘲弄。
我有這樣的事情。
string desktopConnectionString = ConfigurationManager.ConnectionStrings["Desktop"].ConnectionString;
string messagingConnectionString = ConfigurationManager.ConnectionStrings["MessageQueue"].ConnectionString;
string usersConnectionString = ConfigurationManager.ConnectionStrings["Users"].ConnectionString;
// Map linqToSql entity types to interfaces
TableMapper typeFinder = new TableMapper();
typeFinder.Define<EzsDashboard>().As<IDashboard>();
typeFinder.Define<EzsDashboardGadget>().As<IGadget>();
typeFinder.Define<EzsDashboardGadgetAssignment>().As<IGadgetAssignment>();
...
IDesktopRepository dr = new DesktopRepository(new LinqToSqlDataSource(new DataContext(desktopConnectionString), typeFinder)));
Bind<IDesktopRepository>().ToConstant(dr).InRequestScope();
IUserRepository ur = new UserRepository(new LinqToSqlDataSource(new DataContext(usersConnectionString), typeFinder)));
Bind<IUserRepository>().ToConstant(ur).InRequestScope();
IMessageRepository mr = new MessageRepository(new LinqToSqlDataSource(new DataContext(messagingConnectionString), typeFinder)));
Bind<IMessageRepository>().ToConstant(mr).InRequestScope();
雖然這在物理上有效。我發現我的asp.net MVC應用程序中的數據通常會失效。例如,我將添加一個小工具到它顯示的儀表板,如果我檢查數據庫,它會正確保存到數據庫中。我重新加載頁面,儀表板不顯示任何內容。點擊應用程序有時會導致它「刷新」,並顯示保存的數據。
這是可見的另一種方法是,如果我改變我的web.config並觸發應用程序重新加載。當我打開儀表板時,所有內容都完全顯示爲應有的樣子。
有人可以請提供一些幫助,結合連接與字符串> DataContext-> LinqToSqlDataSource-> DomainRepository
完美。由於BindToConstant,您在存儲庫背後的推理聽起來很合理。我在綁定結束時確實有InRequestScope,但它一定不能正常工作。 您的解決方案刪除了一些額外的代碼行並修復了我遇到的陳舊數據問題。非常感謝。 順便說一句,這是在應用程序啓動時執行的; – 2010-07-19 13:51:09