2010-04-28 44 views
1

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

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; } 
  • 初始化在类的构造函数中的Guid像这样

    ID = Guid.NewGuid();

  • 就是这样,所有的工作。

    回答

    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并在构造函数上设置。

    +0

    我现在看到 - 挖掘一点,添加控制器模板使用int,我只需要把它弄乱,使它更多DB4o-ised – 2010-04-28 19:54:58

    0

    这取决于。

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

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

    在你的情况上面的Accound类带来了自己的id字段。然而,如何产生这个ID我不能告诉从该片段。

    +0

    谢谢,这是有道理的。在这种情况下,ID尚未创建(还) – 2010-04-28 19:56:06