1

私は次のコードを持っています:

 Assert.IsTrue(Repository.FindAll<string>().Count() == 0);
 string newString = "New String";
 Repository.Save(newString);
 Assert.IsTrue(Repository.FindAll<string>().Count() == 1);

しかし、それは失敗しています。文字列を保存しているという事実と関係があると思います。

私のSave()コードはこれです:

  public void Save<T>(T obj)
  {
     if (obj == null)
        throw new ArgumentNullException("obj not allowed to be null");

     Db.Store(obj);
     Db.Commit();
  }

私の永続的なクラスには何か特別なものが必要ですか?または、db4oでほとんど何でも保存できますか?

4

1 に答える 1

3

私の知る限り、プラットフォームプリミティブは、参照型(System.Stringなど)であっても、インスタンスが別のオブジェクトの子である(つまり、フィールドで参照される)場合にのみ保存され、そのオブジェクトが保存されます。したがって、C#またはJavaのプリミティブでStore()を呼び出しても、それは保存されません。基本的に、文字列を保存するには、文字列を参照するエンティティを作成する必要があります。文字列をRDBMSに保存するためにテーブルを作成する必要があるのとほぼ同じ方法です。

パブリッククラスStringEntity
{{
   プライベート読み取り専用文字列値。

   public StringEntity(string value)
      : ベース()
   {{
      this.value = value;
   }
}

..。

Assert.IsTrue(Repository.FindAll <StringEntity>()。Count()== 0);
Repository.Save(new StringEntity( "New String"));
Assert.IsTrue(Repository.FindAll <StringEntity>()。Count()== 1);

編集:またはそれ以上

パブリッククラスPrimitive<T>
{{
   プライベート読み取り専用T値。

   public Primitive(T値)
      : ベース()
   {{
      this.value = value;
   }
}

..。

Assert.IsTrue(Repository.FindAll <Primitive <string >>()。Count()== 0);
Repository.Save(new Primitive <string>( "New String"));
Assert.IsTrue(Repository.FindAll <Primitive <string >>()。Count()== 1);
于 2009-10-25T21:30:17.797 に答える