以下は StackOverFlow 例外を生成するため、db4o 8.0 for .NET でバグが発生した可能性があると思います。
public static void Test() {
var config = Db4oEmbedded.NewConfiguration();
var field = "ID";
config.Common.ObjectClass(typeof(TestClass)).ObjectField(field).Indexed(true);
config.Common.Add(new UniqueFieldValueConstraint(typeof(TestClass), field));
var db = Db4oEmbedded.OpenFile(config, "test.yap");
db.Store(new TestClass());
db.Commit();
}
public class TestClass {
//[NonSerialized]
public object DataMember = new object();
public string ID;
}
私の場合、DataMember を Transient ([NonSerialized]) としてマークし、問題を回避することができました。
ただし、これにより、述語で DataMember を使用することができなくなります (私の場合、DataMember はすべてのプロパティでロックとして使用される単純なオブジェクトですが、DataMember が述語内で null であるため、TestClass のコンストラクターが呼び出されなかった場合と似ています)。 .
なぜそれがうまくいかないのか、何か考えがありますか?バグレポートを提出しますか?