Db4O-文字列を保存できますか?
-
06-07-2019 - |
質問
次のコードがあります:
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でほとんど何でも保存できますか?
解決
私が知る限り、プラットフォームプリミティブは、参照型(System.Stringなど)であっても、インスタンスが別のオブジェクトの子である場合(つまり、フィールドで参照される場合)にのみ格納され、そのオブジェクト保存されています。したがって、C#またはJavaのプリミティブでStore()を呼び出しても保存されません。基本的に、文字列を保存するには、文字列を参照するエンティティを作成する必要があります。文字列をRDBMSに保存するためにテーブルを作成する必要があるのとほぼ同じ方法です。
public class StringEntity { private readonly string value; public StringEntity(string value) : base() { this.value = value; } } ... Assert.IsTrue(Repository.FindAll<StringEntity>().Count() == 0); Repository.Save(new StringEntity("New String")); Assert.IsTrue(Repository.FindAll<StringEntity>().Count() == 1);
編集: またはそれ以上
public class Primitive<T> { private readonly T value; public Primitive(T value) : base() { 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);
所属していません StackOverflow