私はかなり新しいc#とMVCであり、今日はDB4oで遊んでいます。ユーザーから提供されたURLを介して映画をスクレイプする練習サイトをまとめました。その後、フィルムはdb4oデータベースに保存されます。ただし、サイトを起動するたびにDb4objects.Db4o.Ext.DatabaseClosedExceptionが
スローされるようになりました。現在の接続を閉じずに、DBを何度も呼び出しているように感じます。
これが私のコントローラーです。これが問題の原因だと思います。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcMovieDatabase.Models;
using Db4objects.Db4o;
using Db4objects.Db4o.Linq;
using System.IO;namespace MvcMovieDatabase.Controllers
{
public class HomeController : Controller
{
static string YapFileName = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"moviesDB.yap");
IObjectContainer db4o = Db4oEmbedded.OpenFile(YapFileName);
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
[HttpGet]
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(string movieURL)
{
Movie newMovie = new Movie();
MovieDirectory dir = new MovieDirectory();
newMovie = dir.GetMovieData(movieURL);
db4o.Store(newMovie);
db4o.Close();
return RedirectToAction("Index");
}
public ActionResult DB4o()
{
IEnumerable<Movie> allFilms = from movie in db4o.Query<Movie>()
select movie;
db4o.Close();
return View(allFilms);
}
}
}
createメソッドは文字列を受け取り、データを取得するために必要なコードを実行します。db4oメソッドは、クエリを実行して、データベースから保存されたデータを取得します。問題を見つけることができるかどうかを確認するために、ストリームを閉じて開き始めましたが、その後、Viewofdb40メソッド内のこのコードに対して同じ例外がスローされ始めました。
@model IEnumerable<MvcMovieDatabase.Models.Movie>
@{
ViewBag.Title = "DB4o";
}
<h2>DB4o</h2>
@foreach (var item in Model)
{
foreach (var cast in item.MovieCastList)
{
<p><img src="@cast.CastImage" /></p>
<p>@cast.CastRealName | <span>@cast.CastFilmName</span></p>
}
}
しかし、これはおそらく私の干渉によるものかもしれません。この問題について助けてくれてありがとう。