所以,我正在使用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; }
在类构造函数中初始化Guid,如此
ID = Guid.NewGuid();
就是这样,一切正常。
答案 0 :(得分:0)
取决于。
Db4o通过内存中object identity跟踪和识别对象。数据库中的同一对象始终由内存中的同一对象表示。例如,在简单的桌面应用程序中,您不需要object-id。
现在,一旦对象被序列化或必须跨Web请求识别,图片就会发生变化。当对象被序列化并再次反序列化时,它具有另一个对象标识。所以db4o不再识别它了。 Web请求也是如此。因此,在这种情况下,必须为对象引入id。 id有不同的可能性,请参阅这些SO-Questions:link db4o, Linq and UUIDs和Db4o 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并在构造函数上设置。