Обработка идентификаторов с помощью db4o и ASP.NET MVC2 - PullRequest
1 голос
/ 28 апреля 2010

Итак, я рассматриваю пример TekPub для ASP.NET MVC2 (http://mvcstarter.codeplex.com/) с использованием DB4o, и есть множество шаблонов для создания контроллеров и т. Д., Сгенерированный код выглядит следующим образом:

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

Теперь я понимаю, что при использовании DB4o или базы данных с похожими объектами идентификаторы не требуются, поэтому как / что именно я передаю, чтобы включить этот вид шаблонного кода для работы?

ОБНОВЛЕНИЕ: оба ответа были полезны, я изменил шаблоны, чтобы использовать GUID в качестве идентификатора. Я добавлю сюда любой соответствующий код / ​​примечания, как только увижу, как это работает.

ОБНОВЛЕНИЕ: Итак, то, что я сделал (работает именно так, как я ожидал), 1. Добавьте идентификатор в мою модель, т.е.

public Guid ID { get; set; }
  1. Инициализировать Guid в конструкторе классов следующим образом:

    ID = Guid.NewGuid ();

и все, все работает.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2010

В 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 голосов
/ 28 апреля 2010

Это зависит.

Db4o отслеживает и идентифицирует объекты по их памяти идентификатор объекта . Один и тот же объект в базе данных всегда представлен одним и тем же объектом в памяти. Например, в простом настольном приложении вам не нужен идентификатор объекта.

Теперь картина меняется, как только объекты сериализуются или должны быть идентифицированы по веб-запросам. Когда объект сериализуется и снова десериализуется, у него появляется другой объектный идентификатор. Так что db4o его больше не распознает. То же самое относится и к веб-запросам. Поэтому в таких сценариях необходимо ввести идентификатор для объектов. Существуют различные возможности для идентификаторов, см. Эти вопросы SO: ссылка db4o, Linq и UUID и Db4o MvcApplication

В вашем случае выше Accound-класс приносит свое собственное id-поле. Однако, как этот идентификатор генерируется, я не могу сказать из этого фрагмента.

...