1

所以,我正在查看使用 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();

就是这样,一切正常。

4

2 回答 2

0

这取决于。

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

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

在您的情况下,Accound 类带来了自己的 id 字段。但是,我无法从该片段中看出此 ID 是如何生成的。

于 2010-04-28T14:07:20.717 回答
0

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

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

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

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

于 2010-04-28T15:17:40.227 回答