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);
    }

さて、私の理解では、IDが不要なDB4oまたは類似のオブジェクトデータベースを使用しているので、この種のテンプレート化されたコードを機能させるには、どのように/何を正確に渡すのですか?

更新:どちらの回答も役に立ちました。GUIDをIDとして使用するようにテンプレートを変更しました。それがどのように機能するかを確認したら、関連するコード/メモをここに追加します。

更新:つまり、私が行ったこと(これは私が期待するとおりに機能します)は1です。モデルにIDを追加します。

public Guid ID { get; set; }
  1. このようにクラスコンストラクタでGuidを初期化します

    ID = Guid.NewGuid();

それだけです、すべて機能しています。

4

2 に答える 2

0

場合によります。

Db4o は、メモリ内オブジェクト IDによってオブジェクトを追跡および識別します。データベース内の同じオブジェクトは、常にメモリ内の同じオブジェクトによって表されます。たとえば、単純なデスクトップ アプリケーションでは、オブジェクト ID は必要ありません。

オブジェクトがシリアル化されるか、Web リクエスト全体で識別される必要があるとすぐに状況が変わります。オブジェクトがシリアライズされ、再度デシリアライズされると、別のオブジェクト ID を持ちます。そのため、db4o はそれを認識しなくなりました。同じことが Web リクエストにも当てはまります。したがって、そのようなシナリオでは、オブジェクトの ID を導入する必要があります。ID にはさまざまな可能性があります。これらの SO-Questions を参照してください: link db4o、Linq および UUIDsおよびDb4o MvcApplication

上記の場合、Acound-class は独自の 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 を自動的に生成しません...最後の ID が何であったかはわかりません。したがって、Guid はオブジェクトで使用され、コンストラクターで設定されます。

于 2010-04-28T15:17:40.227 に答える