TekpubのRavenDBに沿って、ASP.NETMVCでの使用について説明しています。ローカルマシンでRavenServer.exeプログラムを実行していて、ベースコントローラーを次のように設定しています。
public class RavenController : Controller
{
public new IDocumentSession Session { get; set; }
private static IDocumentStore documentStore;
protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
{
return base.Json(data, contentType, contentEncoding, JsonRequestBehavior.AllowGet);
}
public static IDocumentStore DocumentStore
{
get
{
if (documentStore != null)
return documentStore;
lock (typeof(RavenController))
{
if (documentStore != null)
return documentStore;
documentStore = new DocumentStore
{
Url = "http://localhost:8080"
}.Initialize();
}
return documentStore;
}
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
Session = DocumentStore.OpenSession();
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
using (Session)
{
if (Session != null && filterContext.Exception == null)
Session.SaveChanges();
}
}
}
RavenDBから提供されたサンプルアルバムデータ(これもビデオから)を使用して定義された単純なモデルがあります。
public class Album {public string AlbumArtUrl {get; セットする; } public string Title {get; セットする; } public int CountSold {get; セットする; } public decimal Price {get; セットする; }
public ArtistReference Artist { get; set; }
public GenreReference Genre { get; set; }
}
public class ArtistReference
{
public string Id { get; set; }
public string Name { get; set; }
}
public class GenreReference
{
public string Id { get; set; }
public string Name { get; set; }
}
最後に、これが私のコントローラーです。
public class HomeController:RavenController {public ActionResult Album(string id){var album = Session.Load(id); View(album);を返します。}
}
さて、URLlocalhost:xxx/home/album/661
にアクセスしても、結果はまったく得られません。デバッグの結果、「アルバム」がnullであるため、RavenDBは何もロードしていません。サーバーを見ると、パスを要求する404を取得していることがわかります/docs/661
。ただし、RavenDbスタジオを使用して問題のアルバムに移動すると、検索するURL(データを返す)は/docs/albums/661
です。そのため、RavenDBがMVCリクエストを介してドキュメントを検索できるようにするための何かが不足しているようですが、管理スタジオを介してドキュメントを正しく検索できます。
私が忘れているアイデアはありますか?