使用db4o和ASP.NET MVC2处理ID

时间:2010-04-28 11:44:57

标签: asp.net-mvc-2 db4o

所以,我正在使用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的simliar对象数据库,那么我应该如何/通过什么来启用这种模板化代码才能运行?

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

更新:所以,我所做的(完全按照我的预期工作)是 1.在我的模型中添加ID,即

public Guid ID { get; set; }
  1. 在类构造函数中初始化Guid,如此

    ID = Guid.NewGuid();

  2. 就是这样,一切正常。

2 个答案:

答案 0 :(得分:0)

取决于。

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

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

在上面的例子中,Accound-class带来了自己的id-field。但是,如何生成此ID,我无法从该片段中分辨出来。

答案 1 :(得分: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并在构造函数上设置。