只需使用MVC 3 RC2和RavenDB构建一个快速,简单的站点即可进行一些测试。

我已经能够做很多项目,但是我对Html.ActionLink()如何处理乌鸦DB ID感到好奇。

我的示例:我有一个称为“原因”的文档(某种原因,主要是文本),其中包含原因文本和链接列表。我可以通过我的存储库添加,删除以及做其他所有事情。

以下是我的剃须刀视图的一部分,该部分在项目符号列表中列出了每个原因,并以“编辑”链接作为第一个文本:

@foreach(var Reason in ViewBag.ReasonsList)
{
    <li>@Html.ActionLink("Edit", "Reasons", "Edit", new { id = Reason.Id }, null) @Reason.ReasonText</li>
    <ul>
    @foreach (var reasonlink in Reason.ReasonLinks)
    {
        <li><a href="@reasonlink.URL">@reasonlink.URL</a></li>
    }
    </ul>
}


问题

除编辑链接外,此方法均正常运行。虽然此处的值和代码似乎可以直接工作(即,链接直接触发),但RavenDB将我文档的ID保存为“ reasons / 1”。

因此,当URL发生并传递ID时,结果路由为“ http:// localhost:4976 / Reasons / Edit / reasons / 2”。因此,正确附加了ID,但是MVC会将其解释为自己的路由。

关于如何解决这个问题的任何建议?我是否需要创建一条特殊的路线来处理它,还是可以做些其他事情?

最佳答案

我刚刚下载了最新版本的RavenDB并进行了尝试。

public class Entity {
    public int Id { get;set; }
    public string Text { get;set; }
}


当我将其保存到RavenDB时,Raven中的id是“ entities / 1”,但是RavenDB客户端中的映射能够成功地将ID从数据库中的ID解释为所需的整数。

var entity = session.Load<Entity>(1);
Assert.IsTrue(entity.Id == 1);


您不需要扩展方法,因此您无需如上所述更改任何路由,因为您将处理好的ol'整数。字符串Ids几乎破坏了交易,但是令人惊讶的是,它起作用了,因此RavenDB又重新开始了。


注意:我通过观看Rob Ashton的演讲并意识到他所有的文档类都具有整数作为Ids来解决这个问题。

10-07 14:05
查看更多