【问题标题】:Handling ID's with db4o and ASP.NET MVC2使用 db4o 和 ASP.NET MVC2 处理 ID
【发布时间】:2010-04-28 11:44:56
【问题描述】:

所以,我正在查看使用 DB4o 的 ASP.NET MVC2 (http://mvcstarter.codeplex.com/) 的 TekPub 示例,并且有一堆用于创建控制器等的模板,生成的代码如下所示:

    public ActionResult Details(int id)
    {
        var item = _session.Single<Account>(x=>x.ID == id);
        return View(item);
    }

现在,我的理解是使用 DB4o 或不需要 ID 的类似对象数据库,那么我究竟如何/究竟传递什么来启用这种模板化代码?

更新:两个答案都很有用,我修改了模板以使用 GUID 作为 ID。一旦我看到它是如何工作的,我将在这里添加任何相关的代码/注释。

更新:所以,我所做的(完全符合我的预期)是 1. 为我的模型添加一个 ID,即

public Guid ID { get; set; }
  1. 像这样在类构造函数中初始化 Guid

    ID = Guid.NewGuid();

就是这样,一切正常。

【问题讨论】:

    标签: asp.net-mvc-2 db4o


    【解决方案1】:

    在 MVCStarter 中,您描述的方法实际上是:

    public ActionResult Details(string id)
    {
    var item = _session.Single<Account>(x=>x.ID == id);
    return View(item);
    }
    

    id 是 Guid 的字符串表示形式。

    据我所知,db4o 不会自动生成 int ID...它不知道最后一个 ID 是什么。所以在对象上使用 Guid 并在构造函数上设置。

    【讨论】:

    • 我现在明白了 - 稍微挖掘一下,添加控制器模板使用的是 int,我只需要弄乱它以使其更加 DB4o-ised
    【解决方案2】:

    视情况而定。

    Db4o 通过内存中的 object identity 跟踪和识别对象。数据库中的同一个对象总是由内存中的同一个对象表示。例如,在简单的桌面应用程序中,您不需要 object-id。

    现在,一旦对象被序列化或必须跨网络请求进行识别,情况就会发生变化。当对象再次被序列化和反序列化时,它具有另一个对象标识。所以 db4o 不再识别它了。 Web 请求也是如此。所以在这种情况下,有必要为对象引入一个 id。 id 有不同的可能性,请参阅这些 SO-问题:link db4o, Linq and UUIDsDb4o MvcApplication

    在您的情况下,Accound 类有自己的 id 字段。但是这个 id 是如何生成的,我无法从那个 sn-p 中看出。

    【讨论】:

    • 谢谢,这是有道理的。在这种情况下,ID 尚未创建(还)
    猜你喜欢
    • 2011-05-02
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多