どちらの方法でも、データベースに接続してコンテンツをモデルにマップする必要があります。アプローチ1は「Webアプリが接続を開始し、すべてのデータベースコンテンツをメモリにコピーし、そこからアクセスする場合」であり、アプローチ2は「データを表示する必要がある場合は、データベースに接続して特定のコンテンツをコピーする」であると想定しています私のモデルに」。
この場合は、アプローチ 2 が推奨されます (これを実行したと述べているので、すべて問題ありません)。
アプローチ 1 は、小規模なデータベースでは問題なく機能する可能性がありますが、次のようになります。
- データベースが提供するすべての[酸][1]-yの良さを失います
- グローバル コレクション変数にこだわる - Web アプリで最も愛されている概念ではない
- データベース全体が不必要にメモリ内にある。通常、Web アプリの遅い点はネットワークです。必要なときにデータを読み込む数ミリ秒は、html がブラウザーに到達するのにかかる時間に比べれば何でもありません。
アプローチ 1 を試す場合 (お勧めしません。実行しないでください。このコードが実行されるたびに子猫が被害を受けます)、最も簡単な方法は、global.asax.cs ファイルに次のようなものを含めることです。
public class MvcApplication : System.Web.HttpApplication {
public static List<MyTable1> globalTable1;
public static List<MyTable2> globalTable2;
protected void Application_Start() {
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
var DatabaseMagic = new DatabaseAccessClass("a:\path\to\database.mdb");
globalTable1 = DatabaseMagic.getDataForTableOne(); //However you do your loading and mapping
globalTable2 = DatabaseMagic.getDataForTableTwo(); //ditto
}
次に、コントローラーで:
public ActionResult Index()
{
return View(MvcApplication.globalTable1);
}
そしてあなたの見解:
@model List<MvcApplication1.MvcApplication.MyTable1>
@{
ViewBag.Title = "Index";
}
<h2>Blah</h2>
<ul>
@foreach (var i in Model) {
<li>@i.idField - @i.contentField </li>
}
</ul>
(これをしないでくださいと言いましたか?)