2

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リクエストを介してドキュメントを検索できるようにするための何かが不足しているようですが、管理スタジオを介してドキュメントを正しく検索できます。

私が忘れているアイデアはありますか?

4

1 に答える 1

3

WayneM、あなたの問題はここにあります:

public ActionResult Album(string id)

文字列 ID を使用していますが、数値部分のみを渡しています。RavenDB は、完全な ID を与えていると見なし、ID「661」でドキュメントをロードしようとします。

代わりに、次のように定義できます。

public ActionResult Album(int id)

RavenDB は、値の型を渡していることを認識し、規則によって残りの ID が提供されます。

于 2012-06-30T08:23:41.353 に答える